home *** CD-ROM | disk | FTP | other *** search
/ Risc World 3 / Risc World 3.iso / SOFTWARE / ISSUE2 / PD / CAMPINS.ZIP / resources / CFSI (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  2002-05-25  |  170KB  |  7,478 lines

  1.  > ChangeFSI v1.15ac
  2.  altered  x%=sx%*xmul%/xdiv%+.9999:y%=sy%*ymul%/ydiv%+.9999:rows%=sy%
  3.  to  x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
  4.  This helps remove the ugly black border when thumbnailing.
  5.  altered <wimp$scrap> to <Wimp$ScrapDir>.CFSI.XXXXX" where X is [A-Z]
  6.  this ensures the scrapfile CFSI uses is unique if CFSI is called twice
  7.  Added <ChangeFSI$Hourglass> so the Hourglass in ChangeFSI can be turned
  8.  on/off externally.
  9.  altered END=&4000000 to &200000 to ensure only 2M is used by djpeg.
  10.  also added the -maxmemory 512 option to djpeg to ensure not too
  11.  much memory is used up.
  12.  Altered the A$ input variable to GS_Trans it so if system variables are
  13.  use in the input line they are correctly evaluted.
  14.  added hourg%=TRUE to DEF FNChangefsi
  15.  bufferO% 256,buffer% 256
  16.  "OS_GSTrans","<ChangeFSI$Hourglass>",bufferO%,255
  17. hourg$=
  18. getstring(bufferO%)
  19. "ON|On|on",hourg$) 
  20.  hourg%=
  21.  hourg%=
  22.  "OS_GSTrans","<wimp$scrapDir>",bufferO%,255
  23. 'scrap$=
  24. getstring(bufferO%)+".CFSI"
  25.  a%,b%,c%:c%=
  26. (-(a%+b%))
  27. "OS_File",8,scrap$: scrap$+="."+
  28. (26))+
  29. (26))+
  30. (26))
  31. ("Set Wimp$Scrap2 "+scrap$)
  32. areanumber%=0
  33. "OS_GetEnv" 
  34.  "OS_GSTrans",A$,buffer%,256
  35. getstring(buffer%)
  36.  PRINT A$
  37. #!task%=
  38. A$," -wimp"):
  39.  task% 
  40.  z%(1),p%(3),s%(3),m$(30)
  41. %"A%=
  42. "<ChangeFSI$Dir>.Messages"
  43. &)B%=-1:
  44.  B%+=1:m$(B%)=
  45. startfile%=
  46. A$,6)<>"-wimp "
  47.  taskid%4:$taskid%="TASK"
  48.  "Wimp_Initialise",200,!taskid%,m$(20) 
  49.  version%
  50.  version%>=350 
  51. "OS_Memory",8+(2<<8) 
  52.  ,r1,r2:vramsize%=r1*r2
  53.  vramsize%>0 vram%=
  54.  vram%=
  55. vram%=
  56. Wimp    = (1<<18) + (3<<6)
  57. 1HCreateW = Wimp+1:OpenW   = Wimp+5 :CloseW  = Wimp+6:RedrawW = Wimp+8
  58. 2IUpdateW = Wimp+9:GetR%   = Wimp+10:GetW    = Wimp+11:SetI   = Wimp+13
  59. 3IGetI    = Wimp+14:GetP   = Wimp+15:Drag    = Wimp+16:CrMenu = Wimp+20
  60. DcMenu  = Wimp+21
  61.  "OS_SWINumberFromString",,"Wimp_PollIdle" 
  62.  Poll%
  63.  "OS_SWINumberFromString",,"XOS_SpriteOp" 
  64.  spopx%
  65.  "OS_SWINumberFromString",,"OS_SpriteOp" 
  66.  spop%
  67.  "OS_SWINumberFromString",,"OS_ReadMonotonicTime" 
  68.  Time%
  69.  "OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber" 
  70.  ctran%
  71.  "OS_SWINumberFromString",,"Wimp_SetCaretPosition" 
  72.  Caretpos%
  73.  "OS_SWINumberFromString",,"Wimp_GetCaretPosition" 
  74.  Getcaret%
  75.  "XOS_SWINumberFromString",,"DragASprite_Start" 
  76.  dstart%;f%:
  77.  1 dstart%=0
  78.  "XOS_SWINumberFromString",,"JPEG_PlotScaled" 
  79.  jpegpaint%;f%:
  80.  1 jpegpaint%=0
  81.  "OS_Byte",161,&1C 
  82.  ,,f%:
  83. 2)=0 dstart%=0
  84. nextlocation%=
  85.  "Wimp_SlotSize",-1,-1 
  86.  originalslot%
  87. locale_initialise
  88.  version%>=300 
  89.  q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023
  90.  z% 1699,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2399
  91. eidata%=idata%+2400
  92. H2scrap%=
  93. :sprite%=
  94. :sar%=
  95. :saved%=
  96.  "OS_Byte",161,&8C 
  97.  ,,f%
  98. "Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate"
  99. "Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates"
  100. "Wimp_CloseTemplate":
  101. $+" (code "+
  102.  version%>=300 
  103. name=q%
  104. S$$name="*":here%=0:largest_tem%=0
  105.  "Wimp_LoadTemplate", ,0,,,,name,0 
  106.  ,size%,,,,,here%
  107.  here%
  108.  largest_tem%<size% largest_tem%=size%
  109. $name="*"
  110.  "Wimp_LoadTemplate", ,0,,,,name,here% 
  111.  ,size%,,,,,here%
  112.  z% largest_tem%
  113. dotemplate("Info")
  114.  CreateW,,z% 
  115.  infow%:$!(z%+88+7*32+20)=m$(21)
  116. dotemplate("Processing")
  117.  CreateW,,z% 
  118.  proc%
  119. `ap%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20):p%(3)=!(z%+88+12*32+20)
  120. dotemplate("Output")
  121.  CreateW,,z% 
  122.  output%:admode%=!(z%+88+20*32+20):adspcl%=!(z%+88+19*32+20):oldmode%=!(z%+88+34*32+20)
  123. dotemplate("Scaling")
  124.  CreateW,,z% 
  125.  scalew%:adscale%=!(z%+88+1*32+20)
  126. ecs%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20):s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20)
  127. dotemplate("Save")
  128.  CreateW,,z% 
  129.  save%:adsave%=!(z%+88+1*32+20):adsavesprite%=!(z%+88+0*32+20)
  130. dotemplate("Sprite")
  131.  CreateW,,z% 
  132.  sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20)
  133. jHadsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20)
  134. dotemplate("Source")
  135.  CreateW,,z% 
  136.  srcinfo%:adsrc%=!(z%+88+0*32+20)
  137. dotemplate("Range")
  138.  CreateW,,z% 
  139.  raninfo%:adran%=!(z%+88+0*32+20)
  140. dotemplate("Zoom")
  141.  CreateW,,z% 
  142.  zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20)
  143. dotemplate("JPEGOutput")
  144.  CreateW,,z% 
  145.  jpego%:adjpegq%=!(z%+88+5*32+20)
  146. dotemplate("Pic")
  147.  CreateW,,z% 
  148.  pic%:adtitle%=z%!72
  149. "Wimp_CloseTemplate"
  150. w@!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010
  151. x:$(q%+24)="!"+m$(20):
  152. "Wimp_CreateIcon",,q% 
  153.  iconbar%
  154. y*A%=
  155. "<ChangeFSI$Dir>.Choices":
  156.  A%=0 
  157. z]fast%=
  158. :dest%=1:statescale%=%10000000100:stateproc%=0:stateoutput%=&4052008:statejpeg%=&2
  159. {N$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$p%(3)="4":$adspcl%=""
  160. |=$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4"
  161. $adjpegq%="75":$oldmode%=""
  162. #A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
  163. #A%,$p%(0),$p%(1),$p%(2),$p%(3),$admode%,$adspcl%
  164. 5$p%(1)=
  165. locale_convert($p%(1),".",decimal_point$)
  166. #A%,$s%(0),$s%(1),$s%(2),$s%(3)
  167. q%!12=1<<21
  168. @!q%=scalew%:
  169.  I%=0
  170.  statescale%>>I%
  171. 1 q%!8=1<<21 
  172.  q%!8=0
  173. q%!4=I%:
  174.  SetI,,q%:
  175.  I%=10
  176.  statescale%>>I%
  177. 1 q%!8=1<<21 
  178.  q%!8=0
  179. q%!4=I%+6:
  180.  SetI,,q%:
  181. =!q%=proc%:
  182.  I%=0
  183.  stateproc%>>I%
  184. 1 q%!8=1<<21 
  185.  q%!8=0
  186. q%!4=I%:
  187.  SetI,,q%:
  188. B!q%=output%:
  189.  I%=0
  190.  stateoutput%>>I%
  191. 1 q%!8=1<<21 
  192.  q%!8=0
  193. q%!4=I%:
  194.  SetI,,q%:
  195. >!q%=jpego%:
  196.  I%=0
  197.  statejpeg%>>I%
  198. 1 q%!8=1<<21 
  199.  q%!8=0
  200. q%!4=I%:
  201.  SetI,,q%:
  202.  stateoutput%>>17
  203. 1 q%!8=1<<22 
  204.  q%!8=0
  205. i!q%=output%:q%!12=1<<22:q%!4=7:
  206.  SetI,,q%:q%!4=8:
  207.  SetI,,q%:q%!4=13:
  208.  SetI,,q%:q%!4=14:
  209.  SetI,,q%
  210. showscaletofit:$z%(0)="1":$z%(1)="1"
  211.  "OS_UpdateMEMC" 
  212.  oldmemc
  213. jpegsave%=
  214. "OS_UpdateMEMC",oldmemc,&700:
  215. errorbox:
  216.  CrMenu,,-1
  217.  Drag,,-1
  218. sprite% 
  219.  "Wimp_SlotSize",originalslot%,-1
  220. CF$="":
  221.  startfile% startfile%=
  222. A$,"-wimp")+6):
  223. callFSI
  224.  Poll%,1,q% 
  225.  sprite% 
  226. redraw_window(!q%)
  227. open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
  228.  &400c3,,q%:nextlocation%=
  229. removearea
  230.  "Wimp_SlotSize",originalslot%,-1:saved%=
  231. :sprite%=
  232. checkmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
  233.  GetP,,q%:dw%=q%!12:di%=q%!16:
  234.  dstart% 
  235. "DragASprite_Stop"
  236. Jq%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4:q%!36=!sar%+3
  237.  jpegsave% 
  238.  q%!40=&c85 
  239.  q%!40=&ff9
  240. /temp$=
  241. ZS(adsave%):foo%=
  242. temp$,"."):
  243.  foo%
  244. )temp$=
  245. temp$,foo%+1):foo%=
  246. temp$,".")
  247. -$(q%+44)=temp$+
  248. 0:!q%=44+(
  249.  temp$+1+3
  250.  "Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8
  251. key(!q%,q%!4,q%!24)
  252. menuselect(q%)
  253.  17,18:
  254. receive(q%)
  255. =&0200000
  256. "Set ChangeFSI$ReturnCode "+
  257. $+" (code "+
  258. +")":
  259. removearea:
  260. 1foo%=0:A%=
  261. ChangeFSI(A$,-1,-1,0,-1,-1,foo%,
  262. removearea:*unset ChangeFSI$ReturnCode
  263. dotemplate(a$)
  264.  version%>300 
  265.  "Wimp_LoadTemplate",,0,,,,a$+z$,0 
  266.  ,,indsize%
  267.  A% indsize%
  268. "Wimp_LoadTemplate",,z%,A%,A%+indsize%,-1,a$+z$,0
  269. "Wimp_LoadTemplate",,z%,idata%,eidata%,-1,a$+z$,0 
  270.  ,,idata%
  271. locale_initialise
  272.  decimal_point$=".":
  273.  "Territory_ReadSymbols",-1,0 
  274. decimal_point$=
  275. locale_convert(n$,f$,t$)
  276.  f$=t$ 
  277. n$,f$)
  278.  i%<>0 
  279. n$,i%-1)+t$+
  280. n$,i%+1)
  281. receive(q%)
  282.  q%!16 
  283. removearea:
  284.  "Wimp_CloseDown":
  285.  q%!20<>save% 
  286. B!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap2>"+
  287. "Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8
  288.  jpegsave% 
  289. "OS_File",10,
  290. ZS(q%+44),&c85,,sar%,sar%+jpegsize%
  291.  spop%,&10C,sar%,
  292. ZS(q%+44)
  293. $adsave%=
  294. ZS(q%+44)
  295. 7q%!12=q%!8:q%!16=3:
  296.  "Wimp_SendMessage",18,q%,q%!4
  297.  q%!36<>-1 saved%=
  298.  CrMenu,,-1
  299.  3:F$=
  300. ZS(q%+44):
  301.  scrap% scrap%=scrap%=q%!12
  302. 6q%!12=q%!8:q%!16=4:
  303. "Wimp_SendMessage",17,q%,q%!4
  304. callFSI
  305.  q%!40 
  306.  &ff0,&c85
  307. 6q%!12=q%!8:q%!16=4:
  308. "Wimp_SendMessage",17,q%,q%!4
  309. ZS(q%+44):
  310. callFSI
  311.  saved%
  312. sprite% 
  313. -!buffer%=
  314. :$(buffer%+4)=m$(2)+F$+m$(3)+
  315. "Wimp_ReportError",buffer%,%10111,m$(20) 
  316. 3q%!12=q%!8:
  317.  A%<>1 
  318. "Wimp_SendMessage",19,q%,0
  319. 9,&400C1:
  320.  sprite% 
  321. getmodeinfo:
  322. &400d1,pic%,0,-32767,32767,0
  323. showscaletofit
  324. "XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 
  325. ,,bootlen%
  326. paltemp%?bootlen%=13
  327. #q%!20,"Run "+$paltemp%
  328. callFSI
  329. checkvalues 
  330. deducemode:A%=47
  331. jpegsave%=
  332.  dest%=0 
  333. Ajpegsave%=
  334. :A$="JPEG":
  335. geticonstate(jpego%,2) A$="JPEGMONO"
  336. A$+=$adjpegq%
  337. geticonstate(output%,15) 
  338. A$+=$adspcl%
  339. geticonstate(output%,16) 
  340. geticonstate(output%,5)
  341. geticonstate(output%,11) A$+="R"
  342.  A$,3 
  343.  A%=63 
  344. geticonstate(output%,6) A$="27t"
  345. geticonstate(output%,12) A$="12t"
  346.  A%=255 A$+="d"
  347. /A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$
  348. ChangeFSISuffix
  349. %info$="":range$=m$(19):cputime%=0
  350.  sprite% !q%=pic%:
  351.  &400c3,,q%:saved%=
  352. :sprite%=
  353. nextlocation%=
  354.  "Wimp_SlotSize",originalslot%,-1:
  355. removearea
  356.  fast% 
  357.  "OS_UpdateMEMC",&300,&700 
  358.  oldmemc
  359. ChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0)
  360.  fast% 
  361.  "OS_UpdateMEMC",oldmemc,&700
  362.  scrap% scrap%=
  363. "OS_File",6,F$
  364.  A%<2 
  365.  sar%<>0 
  366. -$adsx%=
  367.  xsp%:$adsy%=
  368.  ysp%:
  369.  jpegsave% 
  370. "$adsm%="JPEG":$adsname%="JPEG"
  371. $adsbytes%=
  372.  jpegsize%
  373. x=xsp%*2:y=ysp%*2
  374. &35,-1,4 
  375. ,,nx:
  376. &35,-1,5 
  377. =!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
  378. $adsavesprite%="file_c85"
  379. F$,7)="<Wimp$S" F$="JPEGImage"
  380.  spopx%,&10d,sar%,pixtrans%,255,1
  381. ZS(pixtrans%):
  382.  spopx%,&128,sar%,n$ 
  383. ,,,x,y,,m
  384. $adsm%=
  385.  m:$adsname%=n$
  386. $adsbytes%=
  387.  sar%!12
  388. &35,m,4 
  389. ,,nx:x=x<<nx
  390. &35,m,5 
  391. ,,ny:y=y<<ny:
  392. getmodeinfo
  393. $adsavesprite%="file_ff9"
  394. F$,7)="<Wimp$S" F$="SpriteFile"
  395. %/!q%=save%:q%!4=0:q%!8=0:q%!12=0:
  396.  SetI,,q%
  397. &c$adran%=range$:$adsrc%=info$+m$(0)+
  398. (cputime%
  399. 100)+decimal_point$+
  400. (cputime%
  401. 100),2)+m$(1)
  402. saved%=
  403. :sprite%=
  404. ()A%=
  405. "."+F$,A%,1)<>".":A%-=1:
  406. $adsave%=
  407. "."+F$,A%+1)
  408. pic%=
  409. create_window(x,y,F$)
  410. popup(pic%,-1)
  411. checkvalues
  412.  e,error$,flag%
  413.  dest%=0 
  414. $adjpegq%>100 
  415. 11e=1:error$=m$(22)+m$(25)+m$(23)+m$(27)+m$(24)
  416. $admode%,1)<"A" 
  417.  dest%=1 
  418.  &35,
  419. $admode%,0 
  420.  ;flag%
  421. $admode%=0 flag%=2
  422. $admode%>127 
  423. $admode%<256 flag%=2
  424.  (flag%
  425. 2)>0 
  426. 81e=2:error$=m$(22)+m$(26)+m$(23)+m$(13)+m$(24)
  427.  Drag,,-1:!buffer%=e:$(buffer%+4)=error$+
  428.  "Wimp_ReportError",buffer%,%01,m$(20) 
  429.  A%=2 
  430. removearea:
  431.  "Wimp_CloseDown":
  432. ChangeFSISuffix
  433. safe%=
  434. geticonstate(scalew%,1) A$+=" "+
  435.  tofitx+": "+
  436.  tofity+":":safe%=
  437. geticonstate(scalew%,5) A$+=" 1:2":safe%=
  438. geticonstate(scalew%,4) A$+=" 1:2 1:1":safe%=
  439. geticonstate(scalew%,3) A$+=" 1:1 1:2":safe%=
  440. geticonstate(scalew%,9) 
  441. safe%=
  442. $s%(0) A$+=" "+$s%(0) 
  443.  A$+=" 1"
  444. A$+=":"+$s%(1)
  445. $s%(2) A$+=" "+$s%(2) 
  446.  A$+=" 1"
  447. A$+=":"+$s%(3)
  448. geticonstate(scalew%,0) A$+=" -nosize"
  449. geticonstate(scalew%,18) A$+=" -noscale"
  450. geticonstate(scalew%,19) A$+=" -lock"
  451. geticonstate(scalew%,6) 
  452. RHsafe%=
  453. geticonstate(scalew%,16) A$+=" -rotate" 
  454.  A$+=" -rotate-"
  455. geticonstate(scalew%,7) A$+=" -hflip":safe%=
  456. geticonstate(scalew%,8) A$+=" -vflip":safe%=
  457. geticonstate(proc%,0) A$+=" -range":safe%=
  458. geticonstate(proc%,1) A$+=" -equal":safe%=
  459. geticonstate(proc%,2) A$+=" -nodither"
  460. geticonstate(proc%,3) A$+=" -invert":safe%=
  461. geticonstate(proc%,4) A$+=" -brighten"
  462. geticonstate(proc%,5) A$+=" -black"+$p%(0)
  463. geticonstate(proc%,6) A$+=" -gamma"+
  464. locale_convert($p%(1),decimal_point$,"."):safe%=
  465. geticonstate(proc%,7) A$+=" -sharpen"+$p%(2):safe%=
  466. geticonstate(proc%,11) A$+=" -smooth"+$p%(3)
  467. checkandfinish
  468.  saved% 
  469. sprite% 
  470. removearea:
  471.  "Wimp_CloseDown":
  472. b-!buffer%=
  473. :$(buffer%+4)=m$(2)+F$+m$(3)+
  474.  "Wimp_ReportError",buffer%,%10111,m$(20) 
  475.  A%=1 
  476. removearea:
  477.  "Wimp_CloseDown":
  478. key(handle%,icon%,key%)
  479.  key%=&1b 
  480.  CrMenu,,-1:
  481.  handle% 
  482.  zoom%:
  483.  key% 
  484. dozoom(icon%-4,0):
  485.  icon%=4 
  486.  &400d2,zoom%,5,,,-1,
  487. $z%(0)
  488.  icon%=5 
  489.  CrMenu,,-1
  490.  &18e,&18f:
  491. dozoom(icon%-4,0)
  492.  &400d2,zoom%,icon%
  493. 1,,,-1,
  494. $z%(icon%
  495.  save%
  496.  key%=13 
  497. savesprite:
  498.  output%
  499.  icon%=34 
  500. geticonstate(output%, 24) 
  501. $admode% = $oldmode%:!q%=output%:q%!4=20:q%!8=0:q%!12=0:
  502.  SetI,,q%
  503. showscaletofit
  504.  key%=13 
  505.  CrMenu,,-1:
  506.  key%=&18e 
  507.  icon% 
  508.  19:icon%=34:key%=oldmode%
  509.  34:icon%=22:key%=adjpegq%
  510.  22:icon%=19:key%=adspcl%
  511.  key%=&18f 
  512.  icon% 
  513.  22:icon%=34:key%=oldmode%
  514.  34:icon%=19:key%=adspcl%
  515.  19:icon%=22:key%=adjpegq%
  516.  key%>1024 
  517.  &400d2,output%,icon%,,,-1,
  518. $key%:
  519.  proc%:
  520.  key% 
  521.  &18e,13:icon%+=1:
  522.  icon%>10 icon%=8:
  523.  key%=13 
  524.  CrMenu,,-1:
  525.  &400d2,proc%,icon%,,,-1,
  526. $p%(icon%-8):
  527.  &18f:icon%-=1:
  528.  icon%<8 icon%=10
  529.  &400d2,proc%,icon%,,,-1,
  530. $p%(icon%-8):
  531.  scalew%:
  532.  key% 
  533.  &18e,13:icon%+=1:
  534.  icon%>13 icon%=10:
  535.  key%=13 
  536.  CrMenu,,-1:
  537.  &400d2,scalew%,icon%,,,-1,
  538. $s%(icon%-10):
  539.  &18f:icon%-=1:
  540.  icon%<10 icon%=13
  541.  &400d2,scalew%,icon%,,,-1,
  542. $s%(icon%-10):
  543.  "Wimp_ProcessKey",key%
  544. savesprite
  545.  F$=$adsave% 
  546.  Drag,,-1:!buffer%=3:$(buffer%+4)=m$(28)+
  547.  "Wimp_ReportError",buffer%,%11,m$(20) 
  548.  A%=2 
  549.  CrMenu,,-1
  550.  jpegsave% 
  551. "OS_File",10,$adsave%,&c85,,sar%,sar%+jpegsize%
  552.  spop%,&10C,sar%,$adsave%
  553.  CrMenu,,-1
  554. checkmouse(mousex%,mousey%,b%,handle%,icon%,ob%)
  555.  moved%:moved%=
  556.  handle% 
  557.  pic%:
  558. domenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20))
  559. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
  560. rmenuhandle%=handle%
  561.  handle% 
  562.  zoom%:
  563.  icon% 
  564. dozoom(0,1)
  565. dozoom(0,-1)
  566. dozoom(1,1)
  567. dozoom(1,-1)
  568.  handle% 
  569.  zoom%:
  570.  icon% 
  571. dozoom(0,-1)
  572. dozoom(0,1)
  573. dozoom(1,-1)
  574. dozoom(1,1)
  575.  handle% 
  576.  output%:
  577.  dest%=0 dest%=1:
  578. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)):
  579.  Getcaret%,,q%:moved%=
  580.  icon% 
  581.  3,4,5,6:
  582. killcurrent(
  583. (22+icon%)):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  584.  SetI,,q%:q%!4=24:
  585.  SetI,,q%
  586. killcurrent("S16,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  587.  SetI,,q%:q%!4=24:
  588.  SetI,,q%
  589. killcurrent("S32,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  590.  SetI,,q%:q%!4=24:
  591.  SetI,,q%
  592. killcurrent("0"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  593.  SetI,,q%:q%!4=24:
  594.  SetI,,q%
  595. killcurrent("8"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  596.  SetI,,q%:q%!4=24:
  597.  SetI,,q%
  598. killcurrent("12"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  599.  SetI,,q%:q%!4=24:
  600.  SetI,,q%
  601. killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  602.  SetI,,q%:q%!4=24:
  603.  SetI,,q%
  604. killcurrent("S16,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  605.  SetI,,q%:q%!4=24:
  606.  SetI,,q%
  607. killcurrent("S32,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  608.  SetI,,q%:q%!4=24:
  609.  SetI,,q%
  610. killcurrent(
  611. deducemode):
  612.  SetI,,q%:
  613.  Caretpos%,output%,19,,,-1,
  614. ($adspcl%):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
  615.  SetI,,q%:q%!4=8:
  616.  SetI,,q%:q%!4=13:
  617.  SetI,,q%:q%!4=14:
  618.  SetI,,q%
  619. killcurrent(
  620. deducemode):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
  621.  SetI,,q%:q%!4=8:
  622.  SetI,,q%:q%!4=13:
  623.  SetI,,q%:q%!4=14:
  624.  SetI,,q%
  625. killcurrent(
  626. deducemode):!q%=output%:q%!4=7:q%!8=1<<22:q%!12=1<<22:
  627.  SetI,,q%:q%!4=8:
  628.  SetI,,q%:q%!4=13:
  629.  SetI,,q%:q%!4=14:
  630.  SetI,,q%
  631. $admode%,1) = "S" 
  632. $admode%,2) = "45" 
  633. killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  634.  SetI,,q%:q%!4=24:
  635.  SetI,,q%
  636. killcurrent("28"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  637.  SetI,,q%:q%!4=24:
  638.  SetI,,q%
  639.  18:!q%=output%:q%!4=24:q%!8=0:q%!12=1<<21:
  640.  SetI,,q%
  641.  24:!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  642.  SetI,,q%:
  643. killcurrent(
  644. deducemode):
  645.  Caretpos%,output%,34,,,-1,
  646. ($oldmode%)
  647.  moved% 
  648.  Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
  649.  moved% 
  650.  Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
  651. geticonstate(output%,18) $admode%=
  652. deducemode
  653. 2!q%=output%:q%!4=20:q%!8=0:q%!12=0:
  654.  SetI,,q%
  655. showscaletofit
  656.  save%:
  657.  icon% 
  658. savesprite
  659.  sprite% 
  660. getw(pic%):
  661. open_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1)
  662.  jpego%:
  663.  dest%=1 
  664.  Getcaret%,,q%
  665. dest%=0:
  666. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
  667.  icon%=5 
  668.  Caretpos%,jpego%,q%!4,q%!8,q%!12,q%!16,q%!20
  669.  icon% 
  670. $adjpegq%=
  671. $adjpegq%-1) 
  672. $adjpegq%=
  673. $adjpegq%+1)
  674. $adjpegq%<0 $adjpegq%="0"
  675. $adjpegq%>100 $adjpegq%="100"
  676. 0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
  677.  SetI,,q%
  678.  Caretpos%,jpego%,5,,,-1,
  679. $adjpegq%
  680. $adjpegq%=
  681. $adjpegq%+1) 
  682. $adjpegq%=
  683. $adjpegq%-1)
  684. $adjpegq%<0 $adjpegq%="0"
  685. $adjpegq%>100 $adjpegq%="100"
  686. 0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
  687.  SetI,,q%
  688.  Caretpos%,jpego%,5,,,-1,
  689. $adjpegq%
  690.  handle% 
  691.  save%:
  692.  icon% 
  693. getw(save%)
  694.  !q%=save%:q%!4=0:
  695.  GetI,,q%
  696. ?!q%=save%:q%!4=5:q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by%
  697. 3q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF
  698. +t$="file_ff9":
  699.  jpegsave% t$="file_c85"
  700.  dstart% 
  701.  dstart%,%11000101,1,t$,q%+8,q%+24 
  702.  "Wimp_DragBox",,q%
  703. dozoom(s%,a%)
  704.  s%=0 
  705. /$z%(0)=
  706. $z%(0)+a%):
  707. $z%(0)="0" $z%(0)="1"
  708.     /$z%(1)=
  709. $z%(1)+a%):
  710. $z%(1)="0" $z%(1)="1"
  711. 2!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:
  712.  SetI,,q%
  713. /!q%=pic%:
  714.  GetW,,q%:f%=q%!28:
  715.  &400c3,,q%
  716. pic%=
  717. create_window(x,y,F$)
  718. popup(pic%,f%)
  719. domenu(handle%,menu$,menutitle$)
  720. menuhandle%=handle%
  721. %menuptr%=buffer%:indirect%=idata%
  722. menuptr%!20=44
  723. $menuptr%=menutitle$
  724. ;menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0
  725. !menuptr%!16=200:menuptr%!24=0
  726. menuptr%+=28
  727.  i1%=i%+1:i%=
  728. menu$+",",",",i1%)
  729. 8item$=
  730. menu$,i1%,i%-i1%):
  731. menuitem(item$):
  732.  item$=""
  733. #menuptr%!-24=(menuptr%!-24)
  734.  handle%=101 
  735.  CrMenu,,buffer%,mousex%-64,96+9*44 
  736.  CrMenu,,buffer%,mousex%-32,mousey%+16
  737. menuitem(text$)
  738.  text$="" 
  739.  +flg%=0:submenu%=-1:I%=
  740. text$,":"):
  741. !*flg%=
  742. text$,I%+1):text$=
  743. text$,I%-1)
  744. text$,">"):
  745. $.submenu%=
  746. text$,I%+1):text$=
  747. text$,I%-1)
  748. menuptr%!0=flg%
  749. menuptr%!4=submenu%
  750. (text$=m$(9)
  751. (F$="" 
  752.  F$="SpriteFile" 
  753.  F$="JPEGImage")) 
  754.  (text$=m$(14)
  755. vram%) 
  756. menuptr%!8=&07400021
  757. menuptr%!8=&07000021
  758.  text$*16+8>buffer%!16 buffer%!16=
  759.  text$*16+8
  760.  text$>12 
  761. /Cmenuptr%!8=menuptr%!8 
  762.  256:menuptr%!20=
  763.  text$+1:menuptr%!16=0
  764. 0?menuptr%!12=indirect%:$indirect%=text$:indirect%+=
  765.  text$+2
  766. $(menuptr%+12)=text$
  767. menuptr%+=24
  768. menuselect(menus%)
  769.  GetP,,paltemp%:adjust%=paltemp%!8 
  770.  DcMenu,,buffer%,menus%,
  771. 200," ")
  772. ,,,a$
  773.  a$="" 
  774.  menuhandle% 
  775.  pic%
  776.  m$(9):
  777. callFSI
  778.  m$(14):fast%=
  779. fast%
  780.  m$(27):dest%=0
  781.  m$(13):dest%=1
  782.  m$(9):
  783. callFSI
  784.  m$(15)
  785. FGstatescale%=0:
  786.  I%=0
  787. 9:statescale%+=
  788. geticonstate(scalew%,I%)<<I%:
  789.  I%=10
  790. 13:statescale%+=
  791. geticonstate(scalew%,I%+6)<<I%:
  792. HCstateproc%=0:
  793.  I%=0
  794. 7:stateproc%+=
  795. geticonstate(proc%,I%)<<I%:
  796. IJstateoutput%=0:
  797.  I%=0
  798. 26:stateoutput%+=
  799. geticonstate(output%,I%)<<I%:
  800. JDstatejpeg%=0:
  801.  I%=0
  802. 3:statejpeg%+=
  803. geticonstate(jpego%,I%)<<I%:
  804. K!A%=
  805. "<ChangeFSI$Dir>.Choices"
  806. #A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
  807. #A%,$p%(0),
  808. locale_convert($p%(1),decimal_point$,"."),$p%(2),$p%(3),$admode%,$adspcl%
  809. #A%,$s%(0),$s%(1),$s%(2),$s%(3)
  810.  m$(16):
  811. checkandfinish
  812.  adjust% 
  813. checkmouse(0,0,2,rmenuhandle%,0,0)
  814. create_window(x,y,title$)
  815. V-x=x*
  816. $z%(0)
  817. $z%(1):y=y*
  818. $z%(0)
  819. $z%(1)
  820. W !z%=0:z%!4=-y:z%!8=x:z%!12=0
  821. X$z%!40=0:z%!44=-y:z%!48=x:z%!52=0
  822.  x<128 
  823.  y<128 z%?35=0 
  824.  z%?35=255
  825. Z)$adtitle%="":
  826.  CreateW,,z% 
  827.  handle%
  828. $adtitle%=title$
  829. =handle%
  830. popup(handle%,f%)
  831.  "OS_ReadModeVariable",-1,4 
  832.  ,,modexshift%
  833.  "OS_ReadModeVariable",-1,5 
  834.  ,,modeyshift%
  835.  "OS_ReadModeVariable",-1,11 
  836.  ,,rightscr%
  837.  "OS_ReadModeVariable",-1,12 
  838.  ,,topscr%
  839. bArightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift%
  840. getw(handle%)
  841. d9xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2
  842. open_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%)
  843. open_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%)
  844.  handle%=-1
  845. q%!0=handle%:q%!28=bhandle%
  846. j)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1%
  847. q%!20=scx%:q%!24=scy%
  848.  OpenW,,q%
  849. getw(handle%)
  850. !q%=handle%:
  851.  GetW,,q%
  852. info(q%+4):bhandle%=q%!28:flags%=q%!32
  853. info(q%)
  854. s=x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20
  855. bx%=x0%-scx%:by%=y1%-scy%
  856. redraw_window(handle%)
  857.  handle%=pic% 
  858. x?!factors%=!ifactors%*
  859. $z%(0):factors%!4=ifactors%!4*
  860. $z%(0)
  861. yCfactors%!8=ifactors%!8*
  862. $z%(1):factors%!12=ifactors%!12*
  863. $z%(1)
  864. reduce(!factors%,factors%!8):
  865. reduce(factors%!4,factors%!12)
  866. !q%=handle%
  867.  RedrawW,,q% 
  868.  more%
  869. info(q%+4):by%=by%-
  870. $z%(0)
  871. $z%(1))
  872.  more%
  873.  jpegsave% 
  874.  jpegpaint% 
  875.  jpegpaint%,sar%,bx%,by%,factors%,jpegsize%,1 
  876. 1)=0 
  877.  spopx%,&134,sar%,n$,bx%,by%,,factors%,spx%
  878.  GetR%,0,q% 
  879.  more%
  880. geticonstate(handle%,icon%)
  881. &!q%=handle%:q%!4=icon%:
  882.  GetI,,q%
  883. =q%!24>>21 
  884. getmodeinfo
  885.  jpegsave% 
  886. &35,-1,4 
  887. ,,nx:
  888. &35,-1,5 
  889. =!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
  890. "XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans%
  891.  spopx%,&118,sar%,n$ 
  892.  ,,sptr%
  893.  sptr%!32=44 
  894. palptr%=0
  895.  grab%=0 
  896.  2048-8 
  897.  8:paltemp%!(grab%>>1)=sptr%!(grab%+44):
  898. palptr%=paltemp%
  899.  Q%=0
  900. 255:pixtrans%?Q%=Q%:
  901.  sptr%!32=44+2048 
  902.  Q%=0
  903.  ctran%,palptr%!(Q%<<2)
  904. pixtrans%?Q%:
  905.  "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans%
  906. 8spx%=-1:
  907.  Q%=0
  908.  pixtrans%?Q%<>Q% spx%=pixtrans%
  909. deducemode
  910.  m,x,y
  911. geticonstate(output%,21) 
  912. geticonstate(output%,17) 
  913. ="JPEG8" 
  914. ="JPEG24"
  915. geticonstate(output%,18) 
  916.  &6,135 
  917. &35,-1,9 
  918.  m>3 
  919. &35,-1,4 
  920. &35,-1,5 
  921. x=180/(2^x):y=180/(2^y)
  922. ="S"+
  923. (2^m)+","+
  924.  x+","+
  925. geticonstate(output%,24) 
  926. =$oldmode%
  927. =$admode%
  928. showscaletofit
  929.  m,x,y
  930. $admode%=
  931. deducemode
  932.  ?admode% 
  933. $admode%,5)>
  934. $admode%,8) x=6 
  935. $admode%,2)>16 x+=5 
  936.  x+=4
  937. &35,-1,11 
  938. ,,tofitx:
  939. &35,-1,12 
  940. ,,tofity
  941. &35,-1,11 
  942. ,,tofitx:
  943. &35,-1,12 
  944. ,,tofity
  945. $admode%
  946. &35,m,11 
  947. ,,tofitx:
  948. &35,m,12 
  949. ,,tofity
  950. &35,m,4 
  951. &35,m,5 
  952.  y>x x=6 
  953. &35,m,9 
  954. ,,y:x+=y
  955. Atofitx+=1:tofity+=1:$adscale%=m$(17)+
  956.  tofitx+m$(18)+
  957.  tofity
  958. @q%!12=1<<21:!q%=output%:
  959.  I%=0
  960.  I%=x q%!8=1<<21 
  961.  q%!8=0
  962. =q%!4=I%+3:
  963.  SetI,,q%:
  964.  x=12 q%!8=0:q%!4=24:
  965.  SetI,,q%
  966. killcurrent(m$)
  967. "q%!12=1<<21:!q%=output%:q%!8=0
  968. q%!4=20:
  969.  SetI,,q%
  970. $admode%=m$
  971. ZS(I%)
  972.  A$+=
  973. ?I%:I%+=1:
  974. ?I%<14:=A$
  975. errorbox
  976.  Drag,,-1:!buffer%=
  977. :$(buffer%+4)=
  978. $+" (code "+
  979. +")"+
  980.  "Wimp_ReportError",buffer%,%11,m$(20) 
  981.  A%=2 
  982. removearea:
  983.  "Wimp_CloseDown":
  984. ChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,
  985.  ram%,fast%)
  986.  A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%()
  987.  xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%(),jpq%(),m
  988.  bufferO% 256
  989.  "OS_GSTrans","<wimp$scrapDir>",bufferO%,255
  990. 'scrap$=
  991. getstring(bufferO%)+".CFSI"
  992.  a%,b%,c%:c%=
  993. (-(a%+b%))
  994. "OS_File",8,scrap$: scrap$+="."+
  995. (26))+
  996. (26))+
  997. (26))
  998.  "OS_GSTrans","<ChangeFSI$Hourglass>",bufferO%,255
  999. hourg$=
  1000. getstring(bufferO%)
  1001. "ON|On|on",hourg$) 
  1002.  hourg%=
  1003.  hourg%=
  1004. A$,1)<>" "
  1005.  A$<>0 A$=
  1006. A$,2):
  1007. A$,1)=" " A$=
  1008. A$,2):
  1009. A$,1)=" " A$=
  1010. A$,5))="-QUIT" 
  1011. A$,7):
  1012. A$,1)<>" "
  1013.  A$<>0 A$=
  1014. A$,2):
  1015. A$,1)=" " A$=
  1016. A$,2):
  1017.  A$(100):ARG%=0:B%=
  1018. A$," ")
  1019.  B%<>0
  1020. +ARG%+=1:A$(ARG%)=
  1021. A$,B%-1):A$=
  1022. A$,B%+1)
  1023. A$,1)=" ":A$=
  1024. A$,2):
  1025. A$," ")
  1026.  A$<>"" ARG%+=1:A$(ARG%)=A$
  1027. Xinvert%=
  1028. :range%=
  1029. :sharpen%=
  1030. :info%=
  1031. :cache%=
  1032. :cacheareanumber%=0:dither%=
  1033. :black%=
  1034. Chist%=
  1035. :equal%=
  1036. :vflip%=
  1037. :hflip%=
  1038. :scale%=
  1039. :scaleo%=
  1040. :scrapf%=
  1041. 6gamma=1:rotate%=
  1042. :max%=20000000:bright%=15:lock%=
  1043. rwt=.299:gwt=.587:bwt=.114
  1044.  ARG%<3 
  1045. "ChangeFSI interactive input (read FSIinfo for command line details)"
  1046. "Source file: "s$,"Destination file: "f$,"Output mode: "m$
  1047. "(X)Scale (e.g. 2:1): "xs$:
  1048. "Y Scale: "ys$
  1049. "Info on input picture?"a$:
  1050. a$,1))="Y" info%=
  1051. "Invert picture colours?"a$:
  1052. a$,1))="Y" invert%=
  1053. "Compute histogram of input?"a$:
  1054. a$,1))="Y" hist%=
  1055. "Apply histogram equalisation?"a$:
  1056. a$,1))="Y" equal%=
  1057. "Expand input dynamic range?"a$:
  1058. a$,1))="Y" range%=
  1059. :equal%=
  1060. "Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$
  1061.  a$<>"" sharpen%=
  1062. "Rotate?"a$:
  1063. a$,1))="Y" rotate%=1
  1064. scale%=
  1065. :scaleo%=
  1066. :fast%=
  1067.  A%=ARG%
  1068. uc(A$(ARG%))="-INFO" info%=
  1069. :A$(ARG%)="":ARG%-=1
  1070. uc(A$(ARG%))="-HIST" hist%=
  1071. :A$(ARG%)="":ARG%-=1
  1072. uc(A$(ARG%))="-LOCK" lock%=
  1073. :A$(ARG%)="":ARG%-=1
  1074. uc(A$(ARG%))="-EQUAL" equal%=
  1075. :range%=
  1076. :A$(ARG%)="":ARG%-=1
  1077. uc(A$(ARG%))="-RANGE" range%=
  1078. :equal%=
  1079. :A$(ARG%)="":ARG%-=1
  1080. uc(A$(ARG%))="-INVERT" invert%=
  1081. :A$(ARG%)="":ARG%-=1
  1082. uc(A$(ARG%))="-NOSCALE" scale%=
  1083. :scaleo%=
  1084. :A$(ARG%)="":ARG%-=1
  1085. uc(A$(ARG%))="-NOSIZE" scale%=
  1086. :A$(ARG%)="":ARG%-=1
  1087. uc(A$(ARG%))="-NODITHER" dither%=
  1088. :A$(ARG%)="":ARG%-=1
  1089. uc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1
  1090. uc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1
  1091. uc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1
  1092. uc(A$(ARG%))="-VFLIP" vflip%=
  1093. :A$(ARG%)="":ARG%-=1
  1094. uc(A$(ARG%))="-HFLIP" hflip%=
  1095. :A$(ARG%)="":ARG%-=1
  1096. uc(A$(ARG%))="-NOMODE" fast%=
  1097. :A$(ARG%)="":ARG%-=1
  1098. A$(ARG%),6))="-BLACK" 
  1099. Jblack%=32:
  1100.  A$(ARG%)>6 black%=
  1101. A$(ARG%),7):
  1102.  black%>128 black%=128
  1103. A$(ARG%)="":ARG%-=1
  1104. A$(ARG%),6))="-GAMMA" 
  1105. 1gamma=2.2:
  1106.  A$(ARG%)>6 gamma=
  1107. A$(ARG%),7)
  1108. A$(ARG%)="":ARG%-=1
  1109. A$(ARG%),8))="-SHARPEN" 
  1110. 6sharpen%=24:
  1111.  A$(ARG%)>8 sharpen%=
  1112. A$(ARG%),9)
  1113. A$(ARG%)="":ARG%-=1
  1114. A$(ARG%),7))="-SMOOTH" 
  1115. #7sharpen%=-1:
  1116.  A$(ARG%)>7 sharpen%=-
  1117. A$(ARG%),8)
  1118. $3A$(ARG%)="":ARG%-=1:
  1119.  sharpen%<-23 sharpen%=-23
  1120. A$(ARG%),4))="-RED" rwt=
  1121. A$(ARG%),5):A$(ARG%)="":ARG%-=1
  1122. A$(ARG%),6))="-GREEN" gwt=
  1123. A$(ARG%),7):A$(ARG%)="":ARG%-=1
  1124. A$(ARG%),5))="-BLUE" bwt=
  1125. A$(ARG%),6):A$(ARG%)="":ARG%-=1
  1126. A$(ARG%),4))="-MAX" 
  1127. *Fmax%=
  1128. A$(ARG%),5):
  1129. A$(ARG%),"K")
  1130. A$(ARG%),"k") max%=max%*1024
  1131. A$(ARG%)="":ARG%-=1
  1132.  A%=ARG%
  1133. .2s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5)
  1134.  okinfo% 
  1135.  info%=
  1136.  workspace%>=0 
  1137. flex%=
  1138.  worklimit%=0 
  1139.  flex%=
  1140.  flex%=
  1141. :nextlocation%=worklimit%
  1142. 6"pnm$=
  1143. uc(m$):
  1144. pnm$+",",3) 
  1145. "AIM":m=-1:m$=""
  1146. "P1,","P4,":m=-2:m$="":spm=18
  1147. "P2,","P5,":m=-2:m$="T":spm=20
  1148. "P3,","P6,":m=-4:pnm$=
  1149. pnm$,2):p6bits=8:I%=
  1150. m$,4):m$=""
  1151.  I%>0
  1152.  I%<8 p6bits=I%
  1153. "P15":m=-3:m$=""
  1154. "C15":m=-5:m$=""
  1155. "IRL":m=-4:m$="":p6bits=8
  1156. "S16":m=-6:m$=""
  1157. "S24":m=-7:m$="":p6bits=8
  1158. "S32":m=-8:m$="":p6bits=8
  1159. "JPE":m$="":p6bits=8:
  1160. pnm$,8)="JPEGMONO" m=-9:jpegquality%=
  1161. pnm$,9) 
  1162.  m=-10:jpegquality%=
  1163. pnm$,5)
  1164.  m$:spm=m:m$=
  1165. m$,1)):
  1166. "CDRT",m$)=0 m$=""
  1167.  xs$="" 
  1168. xs$,1)="-" 
  1169. F#xmul%=1:xdiv%=1:ymul%=1:ydiv%=1
  1170.  ys$="" ys$=xs$
  1171. I)xmul%=
  1172.  xs$:xdiv%=
  1173. xs$,":")+1)
  1174. J)ymul%=
  1175.  ys$:ydiv%=
  1176. ys$,":")+1)
  1177. L&flag=-1:
  1178. 8,5,s$ 
  1179.  r0,,r2:dir=r0=2
  1180.  dir 
  1181. NDpanic=
  1182. 8,5,s$+".raw" 
  1183.  r0,,r2:
  1184.  r0=1 s$+=".raw":dir=
  1185. :panic=
  1186.  panic 
  1187. 8,5,s$+".red" 
  1188.  r0,,r2:
  1189.  r0=1 panic=
  1190.  panic 
  1191.  42,"Directory given"
  1192. R>ftype=r2>>8 
  1193.  &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0
  1194.  dir 
  1195. T?c%=
  1196. (s$+".red"):
  1197.  c%=0 
  1198.  42,"Red file "+s$+".red not found"
  1199. UFcc%=
  1200. (s$+".green"):
  1201.  cc%=0 
  1202. 42,"Green file "+s$+".green not found"
  1203. VEccc%=
  1204. (s$+".blue"):
  1205.  ccc%=0 
  1206. 42,"Blue file "+s$+".blue not found"
  1207. X/c%=
  1208.  c%=0 
  1209.  42,"File "+s$+" not found"
  1210. close:
  1211. colourindex=255
  1212. &66f4d 
  1213. ;pcd%
  1214.  ftype 
  1215.  &FF9:flag=0
  1216. uc(s$),".HIP.")
  1217. uc(s$),":HIP.") 
  1218. a flag=300:I%=
  1219. uc(s$),"HIP.")
  1220. s$,I%)="LOP.":cc%=
  1221.  cc%=0 
  1222. 42,"Can't find Lop file "+s$
  1223.  &FF0:
  1224. #c%=0:S$="":
  1225.  I%=1
  1226. 4:S$+=
  1227.  S$="II*"+
  1228. 0 flag=1500:bigendian=
  1229.  S$="MM"+
  1230. 0+"*" flag=1500:bigendian=
  1231.  &DFA:flag=800:
  1232.  dir flag=801
  1233.  &DE2:flag=1000
  1234.  &CBE:flag=3800
  1235.  &BE8:
  1236. (pcd%
  1237. 1)=0 flag=3600
  1238.  &7A0:flag=1200
  1239.  &69d:flag=2000
  1240.  &699:flag=700
  1241.  &698:flag=100
  1242.  &697:flag=1900
  1243.  &691:flag=2600
  1244.  &690:flag=2500
  1245.  &666:flag=666
  1246.  &601:flag=3000
  1247.  &371:flag=3100
  1248.  &300:flag=1300:
  1249.  dir flag=1301
  1250.  4:flag=900:
  1251.  dir flag=901
  1252.  6:flag=950
  1253.  flag=-1 
  1254. #c%=0:S$="":
  1255.  I%=1
  1256. 22:S$+=
  1257. S$,7)="FSIfile" flag=2100
  1258.  flag=-1 
  1259. S$,8)="SIMPLE  " flag=2800
  1260.  flag=-1 
  1261. S$,8))="MERCSOFT"
  1262. S$,8))="SNAPSHOT"flag=902
  1263.  flag=-1 
  1264. S$,8))="MERCSOF1" flag=903
  1265.  flag=-1 
  1266. S$,13))="IRLAM YUV 411" flag=2250
  1267.  flag=-1 
  1268. S$,5)="Irlam" flag=2200
  1269.  flag=-1 
  1270. S$,2)="BM" flag=2400:riffoff%=0
  1271.  flag=-1 
  1272. S$,4)="RIFF" 
  1273. S$,9,8)="RDIBdata" 
  1274. S$,21,2)="BM" flag=2400:riffoff%=20
  1275.  flag=-1 
  1276. S$,4)="GIF8" flag=500
  1277.  flag=-1 
  1278. S$,5)="AV_VO" flag=600
  1279.  flag=-1 
  1280. S$,4)=
  1281. &95 flag=1100
  1282.  flag=-1 
  1283. S$,4)=
  1284. 8 flag=1400
  1285.  flag=-1 
  1286. S$,4)=
  1287. 1 flag=2900
  1288.  flag=-1 
  1289. S$,4)="RIX3" flag=2700
  1290.  flag=-1 
  1291. S$,4)="II*"+
  1292. 0 flag=1500:bigendian=
  1293.  flag=-1 
  1294. S$,4)="MM"+
  1295. 0+"*" flag=1500:bigendian=
  1296.  flag=-1 
  1297. S$,2)=
  1298. &CC flag=2300
  1299.  flag=-1 
  1300. S$,2)="P4"
  1301. S$,2)="P5"
  1302. S$,2)="P6" flag=3300:info$=""
  1303.  flag=-1 
  1304. S$,3)="P15" flag=3400
  1305.  flag=-1 
  1306. S$,3)="PIC" flag=3500
  1307.  flag=-1 
  1308. S$,3)="T-I" flag=3800
  1309.  flag=-1 
  1310. S$,3))="P13" flag=3450
  1311.  flag=-1 
  1312. S$,4)="FORM" 
  1313. S$,9,4)="ILBM" flag=1600
  1314.  flag=-1 
  1315. S$,8)="ALPIAR12" flag=3900:colourindex=4095
  1316.  flag=-1 
  1317. S$,8)="ALPIAR16" flag=3905:colourindex=65535
  1318.  flag=-1 
  1319. S$,7,4)="JFIF" 
  1320.  ftype=&C85 
  1321. *jpegblk%=
  1322. dim(20):
  1323. cachesize(jpegblk%)
  1324.  cache%<
  1325. snb_needdjpeg(c%) 
  1326. #c%:c%=0:X%=
  1327. "Run:djpeg"
  1328. subtask("djpeg -maxmemory 512 "+s$+" <wimp$scrap2>")
  1329. "XOS_CLI","djpeg -maxmemory 512 "+s$+" <wimp$scrap2>" 
  1330. subtask("djpeg -maxmemory 512 "+s$+" <wimp$scrap2>")
  1331. "<wimp$scrap2>":
  1332.  c%=0 
  1333. >scrapf%=
  1334. :flag=3300:info$="JPEG (JFIF) file converted to "
  1335. flag=3700
  1336.  flag=-1 
  1337. S$,5)="btpc " 
  1338. #c%:c%=0:
  1339. subtask("<ChangeFSI$Dir>.btpc "+s$+" <wimp$scrap2>")
  1340. "<wimp$scrap2>":
  1341.  c%=0 
  1342. 7scrapf%=
  1343. :flag=3300:info$="BTPC file converted to "
  1344.  flag=-1 
  1345. #c%=&10:S$="":
  1346.  I%=1
  1347. 9:S$+=
  1348.  S$="MILLIPEDE" flag=200
  1349.  flag=-1 
  1350. #c%=&41:S$="":
  1351.  I%=1
  1352. 8:S$+=
  1353. S$,4)="PNTG" flag=1800:st%=&280
  1354.  flag=-1 
  1355. #c%=196:S$="":
  1356.  I%=1
  1357. 8:S$+=
  1358. S$,4)="PNTG" flag=1800:st%=&2e2
  1359.  flag=-1 
  1360. #c%=522:S$="":
  1361.  I%=1
  1362. 8:S$+=
  1363. &fe flag=1850
  1364.  flag=-1 
  1365. #c%=0:
  1366. #c%=10 
  1367.  C%<6 
  1368.  C%<>1 
  1369. #c%=1 flag=1900
  1370.  flag=-1 
  1371. uc(s$),".PCX.")
  1372. uc(s$),":PCX.")
  1373. s$,4)="/PCX" flag=1900
  1374.  flag=-1 
  1375. uc(s$),".IMAGE.")
  1376. uc(s$),":IMAGE.") flag=400
  1377.  flag=-1 
  1378. s$,4))=".RAW" flag=100
  1379.  flag=-1 
  1380. s$,3))="TGA" flag=2000
  1381.  flag=-1 
  1382. s$,3))="VDA" flag=2000
  1383.  flag=-1 
  1384. uc(s$),".PIC.")
  1385. uc(s$),":PIC.") flag=700
  1386.  flag=-1 
  1387. uc(s$),".IMG.")
  1388. uc(s$),":IMG.")
  1389. s$,4)="/IMG" flag=1400
  1390.  flag=-1 
  1391. uc(s$),".DSP.")
  1392. uc(s$),":DSP.")
  1393. s$,4)="/DSP" flag=1700
  1394.  flag=-1 
  1395. s$,4))="/RGB" flag=3200
  1396.  flag=-1 
  1397. s$,4))="/PCD"
  1398. ftype=&be8)
  1399. ((pcd%
  1400. 1)=1) 
  1401. #c%:c%=0:
  1402. subtask("<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <wimp$scrap2> { > <ChangeFSI$Dir>.pcdtemp }")
  1403. "<wimp$scrap2>":scrapf%=
  1404. :flag=3300:info$="PhotoCD file converted to "
  1405.  flag=-1 
  1406. close:
  1407.  42,"Sorry: format not recognised - please try again or contact your supplier"
  1408. Cstep24=1:input=8:ham=0:planar%=0:bigendianbits=
  1409. :r$="FN"+
  1410.  flag
  1411. 9compression=0:hpredict%=1:striprows%=-1:cachebytes%=
  1412.  xdiv%=0 
  1413.  ydiv%=0 scale%=
  1414.  r%(colourindex)
  1415.  g%(colourindex),b%(colourindex)
  1416.  flag 
  1417. @quant%=4:
  1418. #c%=4:F%=
  1419. W+&1C:
  1420. #c%=F%:st%=
  1421. W+F%-&20:K%=
  1422. W+F%-&20
  1423.  sm<256 
  1424. 53,sm,3 
  1425.  ,,I%
  1426.  st%=F%+12 
  1427. defpal2 
  1428. ipal(2)
  1429. #c%=F%-16:sx%=(
  1430. W+1)*32:rowbytes%=sx%>>3:input=1
  1431. W+1:I%=
  1432. W:sx%-=31-
  1433.  st%=F%+12 
  1434. defpal4 
  1435. ipal(4)
  1436. #c%=F%-16:sx%=(
  1437. W+1)*16:rowbytes%=sx%>>2:input=2
  1438. !sy%=
  1439. W+1:I%=
  1440. W:sx%-=(31-
  1441.  st%=F%+12 
  1442. defpal16 
  1443. ipal(16)
  1444. #c%=F%-16:sx%=(
  1445. W+1)*8:rowbytes%=sx%>>1:input=4
  1446. !sy%=
  1447. W+1:I%=
  1448. W:sx%-=(31-
  1449.  63,255:
  1450.  st%=F%+12 
  1451. defpal
  1452.  K%>st% K%=st%
  1453.  K%-12-F%=2048 
  1454. I%=255 
  1455. #c%=&38
  1456.  C%=0
  1457. 255:D%=
  1458. 9r%(C%)=
  1459. #c%/255*F:g%(C%)=
  1460. #c%/255*F:b%(C%)=
  1461. #c%/255*F
  1462. ipal63
  1463. #c%=F%-16:sx%=(
  1464. W+1)*4:rowbytes%=sx%:sy%=
  1465. W+1:I%=
  1466. W:sx%-=(31-
  1467. 42,"Not understood RISC OS sprite"
  1468. @r$="FN8":
  1469. 53,sm,4 
  1470.  ,,nx:
  1471. 53,sm,5 
  1472.  ,,ny:nx=1<<nx:ny=1<<ny
  1473.  scale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2
  1474. Vinfo$="RISC OS sprite, mode "+
  1475.  sm+" "+
  1476.  sx%+" by "+
  1477.  sy%+" pixels, "+
  1478. bits(input)
  1479. bpp%=sm>>>27:
  1480.  bpp% 
  1481.  1:bpp%=1:r$="FN8":
  1482.  st%=F%+12 
  1483. defpal2 
  1484. newropal(2)
  1485.  2:bpp%=2:r$="FN8":
  1486.  st%=F%+12 
  1487. defpal4 
  1488. newropal(4)
  1489.  3:bpp%=4:r$="FN8":
  1490.  st%=F%+12 
  1491. defpal16 
  1492. newropal(16)
  1493.  4:bpp%=8:r$="FN8":
  1494.  st%=F%+12 
  1495. defpal 
  1496. newropal(256)
  1497.  5:bpp%=16:r$="FN16":
  1498.  st%=F%+12 
  1499.  rpal%(255),gpal%(255):step24=2
  1500.  C%=0
  1501. "gpal%(C%)=(C%>>5)<<8 
  1502. +rpal%(C%)=((C%>>2)
  1503. 31)<<16 
  1504. 3)<<11
  1505.  C%=0
  1506. 31:r%(C%)=C%/31*F:
  1507. :g%()=r%():b%()=r%()
  1508.  6:bpp%=32:r$="FN24":
  1509.  st%=F%+12 
  1510. nopal 
  1511. !rbo%=0:gbo%=1:bbo%=2:step24=4
  1512.  8:bpp%=24:r$="FN24":
  1513.  st%=F%+12 
  1514. nopal 
  1515. rbo%=0:gbo%=1:bbo%=2
  1516. 42,"Not understood new format RISC OS sprite bpp"
  1517. (nx=(sm>>1) 
  1518. &1fff:ny=(sm>>14) 
  1519. &1fff
  1520.  scale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90
  1521. #c%=F%-16:rowbytes%=(
  1522. W+1)*4:sy%=
  1523. W+1:I%=
  1524. W:sx%=(rowbytes%*8-(31-
  1525. W))/bpp%:input=bpp%
  1526. Linfo$="New RISC OS sprite, "+
  1527.  sx%+" by "+
  1528.  sy%+" pixels, "+
  1529. bits(input)
  1530.  bpp%=32 input=24
  1531. #c%=st%:cache%=
  1532. Equant%=8:
  1533. #c%=0:sx%=
  1534. HW:sy%=
  1535. nopal:input=24:rowbytes%=sx%*3+2
  1536. 5rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=
  1537. Linfo$="QRT .raw image, "+
  1538.  sx%+" by "+
  1539.  sy%+" pixels, 24 bits per pixel"
  1540. Gquant%=8:
  1541. #c%=5:sx%=
  1542. HW:sy%=
  1543. HW:sx%=(
  1544. HW-sx%+2)/2:sy%=(
  1545. HW-sy%+2)/2
  1546. #c%=&1a:cadsoft%=
  1547. #c%=&200
  1548.  C%=0
  1549. 255:r%(C%)=
  1550. #c%/255*F:
  1551.  C%=0
  1552. 255:g%(C%)=
  1553. #c%/255*F:
  1554.  C%=0
  1555. 255:b%(C%)=
  1556. #c%/255*F:
  1557. #c%=&600:st%=&600:cache%=
  1558.  cadsoft%=2 
  1559. Crep%=0:r$="FN1100":plbuff%=
  1560. dim(sx%):plbytes%=sx%:cachebytes%=
  1561. r$="FN8":rowbytes%=sx%
  1562. "^info$="Cadsoft type "+
  1563.  cadsoft%+" image, "+
  1564.  sx%+" by "+
  1565.  sy%+" pixels, 8 bits per pixel"
  1566. $Iquant%=5:
  1567. #c%=&2c:st%=
  1568. W+(&38-&2c):
  1569. #cc%=&2c:stcc%=
  1570. W1(cc%)+(&38-&2c)
  1571. #c%=&1c:sx%=(
  1572. W+1)*4:sy%=
  1573. #c%=st%:
  1574. #cc%=stcc%
  1575.  rpal%(255),gpal%(255):input=16:cache%=
  1576. :rowbytes%=sx%
  1577.  C%=0
  1578. (.rpal%(C%)=C%
  1579. 64)<<2 
  1580. &38)<<13
  1581. )Sgpal%(C%)=(C%
  1582. 4)<<1
  1583.  ((C%
  1584. 3)<<1
  1585. &60)>>2)<<8 
  1586. 128)>>3)<<16
  1587.  C%=0
  1588. 31:r%(C%)=C%/31*F:
  1589. :g%()=r%():b%()=r%()
  1590. ,+pbuff%=
  1591. dim(sx%):
  1592.  scale% ymul%=ymul%*2
  1593. -Iinfo$="ArVis image, "+
  1594.  sx%+" by "+
  1595.  sy%+" pixels, 15 bits per pixel"
  1596. /Equant%=8:
  1597. #c%=0:sx%=
  1598. beHW:sy%=
  1599. beHW:X%=
  1600. beHW:st%=
  1601. #c%+X%:
  1602. #c%=st%
  1603. 0Vplbuff%=
  1604. dim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1
  1605. nopal:input=24:rep%=0:cachebytes%=
  1606. :cache%=
  1607. :step24=3
  1608. 2`info$="RT image. run length encoded image, "+
  1609.  sx%+" by "+
  1610.  sy%+" pixels, 24 bits per pixel"
  1611. 4,compression=5:
  1612. #c%=6:GIFsx=
  1613. HW:GIFsy=
  1614. 58GIF=
  1615. #c%:GIFback=
  1616. #c%:GIFext=
  1617. #c%:quant%=(GIF 
  1618.  7)+1
  1619.  GIF 
  1620.  &80 
  1621.  C%=0
  1622. (1<<quant%)-1
  1623. 89r%(C%)=
  1624. #c%/255*F:g%(C%)=
  1625. #c%/255*F:b%(C%)=
  1626. #c%/255*F
  1627. >$GIFgcesz=
  1628. #c%+GIFgcesz
  1629.  GIFgcesz=0:I%=
  1630.  I%<>
  1631.  42,"GIF file without , in right place"
  1632.  GIFext<>0 
  1633.  GIFext<>49 
  1634.  GIFext>49 
  1635. D*xdiv%=xdiv%*64:xmul%=xmul%*(GIFext+15)
  1636. F*ydiv%=ydiv%*(GIFext+15):ymul%=ymul%*64
  1637. I,GIFleft=
  1638. HW:GIFright=
  1639. HW:sx%=
  1640. HW:sy%=
  1641.  GIFsx<sx% 
  1642.  GIFsy<sy% 
  1643.  info% 
  1644. "GIF file with bigger image inside:"
  1645. "Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y"
  1646. "Continue with monitor's size [Y or y]?"A$
  1647.  A$="Y"
  1648. A$="y" sx%=GIFsx:sy%=GIFsy
  1649. "Continuing with ";sx%"x by "sy%"y"
  1650. S*GIF=
  1651.  GIF 
  1652.  &40 flag=501:r$="FN8"
  1653. TJsetcodes%=
  1654. #c%:clearcode%=1<<setcodes%:st%=
  1655. #c%:cache%=
  1656. :cachebytes%=
  1657.  table%(1<<12):stk%=
  1658. dim(1<<13):buf%=
  1659. dim(280):plbuff%=
  1660. dim(sx%)
  1661.  I%=0
  1662. clearcode%-1:table%(I%)=I%:
  1663. WCinfo$="GIF file, "+
  1664.  sx%+" by "+
  1665.  sy%+" pixels, "+
  1666. bits(quant%)
  1667. Y quant%=8:
  1668. #c%=&5c:
  1669.  C%=0
  1670. Z9r%(C%)=
  1671. #c%/255*F:g%(C%)=
  1672. #c%/255*F:b%(C%)=
  1673. #c%/255*F
  1674. #c%=&36e:sy%=
  1675. HW:sx%=
  1676. ]5st%=&380:
  1677. #c%=st%:rowbytes%=sx%:r$="FN8":cache%=
  1678. ^Ginfo$=".PIC image, "+
  1679.  sx%+" by "+
  1680.  sy%+" pixels, 8 bits per pixel"
  1681. `$quant%=8:
  1682. #c%=0:a$=
  1683. #c%:st%=
  1684. a!sx%=
  1685.  a$:sy%=
  1686. a$," ")))
  1687. nopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24"
  1688. c!rbo%=0:gbo%=1:bbo%=2:cache%=
  1689. dLinfo$="MTV .pic image, "+
  1690.  sx%+" by "+
  1691.  sy%+" pixels, 24 bits per pixel"
  1692. f*sx%=512:sy%=256:
  1693.  scale% ymul%=ymul%*2
  1694. g4plbuff%=
  1695. dim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx%
  1696. cache%=
  1697. :cachebytes%=
  1698.  C%=0
  1699. 255:r%(C%)=(C%
  1700. 63)/63*F:
  1701. :g%()=r%():b%()=r%():quant%=6
  1702. jJinfo$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel"
  1703. l<sx%=512:sy%=256:input=24:quant%=6:
  1704.  scale% ymul%=ymul%*2
  1705. m0rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
  1706. n=buff%=
  1707. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%
  1708. o:wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx%
  1709.  C%=0
  1710. 255:r%(C%)=(C%
  1711. 63)/63*F:
  1712. :g%()=r%():b%()=r%()
  1713. qRinfo$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel"
  1714. s(quant%=8:st%=0:
  1715. #c%=0:
  1716. #c%=65536 
  1717. t8sx%=256:sy%=256:
  1718.  scale% ymul%=ymul%*2:xmul%=xmul%*2
  1719. sx%=512:sy%=512
  1720.  C%=0
  1721. 255:r%(C%)=C%/255*F:
  1722. :g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=
  1723. y?info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel"
  1724. quant%=4:
  1725. #c%=65536 
  1726. |8sx%=256:sy%=256:
  1727.  scale% ymul%=ymul%*2:xmul%=xmul%*2
  1728. sx%=512:sy%=512
  1729. =buff%=
  1730. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2
  1731.  C%=0
  1732. 255:r%(C%)=C%/255*F:
  1733. :g%()=r%():b%()=r%()
  1734. Oinput=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel"
  1735. Bquant%=4:
  1736. #c%=8:sx%=
  1737. W:rowbytes%=sx%*3/2:sy%=
  1738. W:st%=20:
  1739. #c%=20
  1740.  scale% ymul%=ymul%*2
  1741. Mplbuff%=
  1742. dim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1
  1743.  C%=0
  1744. 255:r%(C%)=(C%
  1745. &F)/&F*F:
  1746. :g%()=r%():b%()=r%():cache%=
  1747. dinput=24:info$="Hawk V9/Snapshot Colour image, "+
  1748.  sx%+" by "+
  1749.  sy%+" pixels, 12 bits per pixel"
  1750. \quant%=5:
  1751. #c%=8:sx%=
  1752. W:rowbytes%=sx%*2:sy%=
  1753. W:st%=20:
  1754. #c%=20:cache%=
  1755. :r$="FN16":flag=700
  1756.  rpal%(255),gpal%(255):input=16:step24=2
  1757.  C%=0
  1758. "gpal%(C%)=(C%>>5)<<8 
  1759. +rpal%(C%)=((C%>>2)
  1760. 31)<<16 
  1761. 3)<<11
  1762.  C%=0
  1763. 31:r%(C%)=C%/31*F:
  1764. :g%()=r%():b%()=r%()
  1765. ainput=16:info$="Hawk V9 mk II Colour image, "+
  1766.  sx%+" by "+
  1767.  sy%+" pixels, 16 bits per pixel"
  1768. @quant%=8:
  1769. #c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900
  1770.  C%=0
  1771. 255:r%(C%)=C%/255*F:
  1772. :g%()=r%():b%()=r%():r$="FN8":cache%=
  1773. Finfo$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel"
  1774.  1000
  1775. Uquant%=4:sx%=640:sy%=256:
  1776. defpal:st%=
  1777. W:r$="FN"+
  1778. (1000+
  1779.  scale% ymul%=ymul%*2
  1780. %buff%=
  1781. dim(sx%):ctable%=
  1782. dim(st%)
  1783. 12,4,c%,ctable%,st%:st%=
  1784. .pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx%
  1785. Ainfo$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel"
  1786.  1100
  1787. @quant%=1:
  1788. #c%=4:sx%=
  1789. beW:sy%=
  1790. beW:input=
  1791. beW:bigendianbits=
  1792. beW:S%=
  1793. Kcache%=
  1794.  S%=2 cachebytes%=
  1795. :info$="Byte Encoded " 
  1796.  info$="":r$="FN8"
  1797.  I%=0
  1798. D%/3-1:r%(I%)=
  1799. #c%/255*F:
  1800.  I%=0
  1801. D%/3-1:g%(I%)=
  1802. #c%/255*F:
  1803.  I%=0
  1804. D%/3-1:b%(I%)=
  1805. #c%/255*F:
  1806.  input 
  1807.  1:r%(0)=F:g%(0)=F:b%(0)=F
  1808.  4,8:
  1809. nopal
  1810. nopal
  1811.  input 
  1812.  1:rowbytes%=(sx%+15>>4)<<1
  1813.  4:rowbytes%=(sx%+3>>2)<<1
  1814.  8:rowbytes%=(sx%+1>>1)<<1
  1815.  24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3
  1816.  S%=1 bbo%=0:rbo%=2
  1817.  42,"Can't do this Sun pixrect"
  1818. Nst%=D%+&20:rep%=0:
  1819.  cachebytes% plbuff%=
  1820. dim(rowbytes%):plbytes%=rowbytes%
  1821. Dinfo$+="Sun image, "+
  1822.  sx%+" by "+
  1823.  sy%+" pixels, "+
  1824. bits(input)
  1825.  1200
  1826. >quant%=8:sx%=800:sy%=800:st%=1600:
  1827. #c%=st%:vflip%=
  1828.  vflip%
  1829. nopal:r$="FN8":rowbytes%=sx%:cache%=
  1830. Iinfo$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel"
  1831.  1300
  1832. @quant%=8:sx%=128:sy%=256:st%=0:
  1833. #c%=0:
  1834.  scale% xmul%=xmul%*2
  1835. nopal:r$="FN8":rowbytes%=sx%:cache%=
  1836. @info$="satellite image, 128 by 256 pixels, 8 bits per pixel"
  1837.  1301
  1838. <input=24:quant%=8:sx%=128:sy%=256:
  1839.  scale% xmul%=xmul%*2
  1840. Obuff%=
  1841. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:
  1842. nopal:r$="FN901"
  1843. Hinfo$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel"
  1844.  1400
  1845. &planar%=
  1846. #c%=0:Z%=
  1847.  Z%>255 
  1848. +st%=
  1849. beHW*2:planes%=
  1850. beHW:patlen%=
  1851. +pw%=
  1852. beHW:ph%=
  1853. beHW:sx%=
  1854. beHW:sy%=
  1855. Cst%=
  1856. HW*2:input=
  1857. HW:patlen%=
  1858. HW:pw%=
  1859. HW:ph%=
  1860. HW:sx%=
  1861. HW:sy%=
  1862.  scale% 
  1863. #xmul%=xmul%*pw%:xdiv%=xdiv%*282
  1864. #ymul%=ymul%*ph%:ydiv%=ydiv%*282
  1865. Wrowbytes%=sx%+7>>3:pbuff%=
  1866. dim(sx%):plbytes%=rowbytes%*planes%:buff%=
  1867. dim(plbytes%)
  1868. #c%=st%:vrep%=0
  1869.  C%=0
  1870. (1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:
  1871. :g%()=r%():b%()=r%()
  1872. Dinfo$="IMG file, "+
  1873.  sx%+" by "+
  1874.  sy%+" pixels, "+
  1875. bits(planes%)
  1876.  1500
  1877. #c%=4:dir%=
  1878. tiff(4):
  1879. #c%=dir%
  1880. 6rgb=
  1881. :greyunit=100:planar%=1:fillorder=1:resunit=2
  1882. )xnum%=90:xdenom%=1:ynum%=90:ydenom%=1
  1883. tiff(3):
  1884.  Z%=1
  1885. tiff(3):D%=
  1886. tiff(3):C%=
  1887. tiff(4)
  1888.  C%>1 V%=
  1889. tiff(4) 
  1890.  D%=2 
  1891. #c%=dir%+2+Z%*12 
  1892.  D%<4 V%=
  1893. tiff(D%):
  1894. #c%=dir%+2+Z%*12 
  1895. tiff(4)
  1896.  info% 
  1897. "Read tag ";T%" datatype "D%" count "C%" value/pointer "V%
  1898.  256:sx%=V%
  1899.  257:sy%=V%
  1900.  258:
  1901.  C%>1 
  1902.  D%*C%>6 
  1903. #c%=V%:quant%=
  1904. tiff(D%)
  1905. )input=quant%:
  1906.  I%=1
  1907. C%-1:V%=
  1908. tiff(D%)
  1909.  V%<>quant% 
  1910. 42,"Can't do RGB TIFF with different numbers of bits per pixel"
  1911. input+=V%
  1912. nopal
  1913.  quant%=V% 
  1914.  &FF:input=quant%
  1915.  I%=0
  1916. (1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
  1917. g%()=r%():b%()=r%()
  1918. #c%=dir%+2+Z%*12
  1919. quant%=V%:input=quant%
  1920.  I%=0
  1921. (1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
  1922. g%()=r%():b%()=r%()
  1923.  259:compression=V%
  1924.  262:photometric=V%:
  1925.  V%=0 invert%=
  1926. invert%
  1927.  266:fillorder=V%
  1928.  273:stc%=C%:stv%=V%:std%=D%
  1929.  277:sampperpix%=V%:input=quant%*V%:rgb=V%=3
  1930.  278:striprows%=V%
  1931.  279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D%
  1932.  282:
  1933. #c%=V%:xnum%=
  1934. tiff(4):xdenom%=
  1935. tiff(4)
  1936. #c%=dir%+2+Z%*12
  1937.  283:
  1938. #c%=V%:ynum%=
  1939. tiff(4):ydenom%=
  1940. tiff(4)
  1941. #c%=dir%+2+Z%*12
  1942.  284:planar%=V%:
  1943.  planar%=2 input=quant%
  1944.  290:greyunit=10^V%
  1945.  291:
  1946. #c%=V%:
  1947.  I%=0
  1948. C%-1:r%(I%)=
  1949. tiff(D%)/greyunit/2*F:
  1950. g%()=r%():b%()=r%()
  1951. #c%=dir%+2+Z%*12
  1952.  296:resunit=V%
  1953.  317:hpredict%=V%
  1954.  320:
  1955. #c%=V%:
  1956.  I%=0
  1957. C%/3-1:r%(I%)=
  1958. tiff(3)/65535*F:
  1959.  I%=0
  1960. C%/3-1:g%(I%)=
  1961. tiff(3)/65535*F:
  1962.  I%=0
  1963. C%/3-1:b%(I%)=
  1964. tiff(3)/65535*F:
  1965. #c%=dir%+2+Z%*12
  1966.  info% 
  1967. "Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V%
  1968.  st%(stc%):
  1969.  stc%>1 
  1970. #c%=stv%:
  1971.  I%=0
  1972. stc%-1:st%(I%)=
  1973. tiff(std%):
  1974. st%(0)=stv%
  1975.  compression 
  1976.  0,1:info$=""
  1977.  2:info$="CCITT Group 3 compressed "
  1978.  5:info$="LZW compressed ":r$="FN1505"
  1979.  hpredict%=2 
  1980.  info$+="horizontal differenced " 
  1981.  hpredict%>2 info$+=" unknown predictor ("+
  1982.  hpredict%+") "
  1983. 'setcodes%=8:clearcode%=1<<setcodes%
  1984.  table%(1<<12):stk%=
  1985. dim(1<<13):buf%=
  1986. dim(280)
  1987.  I%=0
  1988. clearcode%-1:table%(I%)=I%:
  1989.  32773:info$="PackBits compressed ":r$="FN1501"
  1990.  6:info$="JPEG compressed "
  1991.  info$="Compress "+
  1992.  compression+" - unknown "
  1993. Dinfo$+="TIFF file, "+
  1994.  sx%+" by "+
  1995.  sy%+" pixels, "+
  1996. bits(input)
  1997. Tbigendianbits=fillorder=1:
  1998. #c%=st%(0):stripptr=0:
  1999.  striprows%>=sy% striprows%=-1
  2000.  input 
  2001.  1:rowbytes%=sx%+7>>3
  2002.  2:rowbytes%=sx%+3>>2
  2003.  4:rowbytes%=sx%+1>>1
  2004.  8:rowbytes%=sx%
  2005.  24:rowbytes%=3*sx%
  2006.  32:rowbytes%=4*sx%:
  2007.  photometric<>5 
  2008.  42,"32 bpp TIFF but not CMYK"
  2009.  42,"Can't do "+
  2010. bits(input)+" TIFF"
  2011.  planar%=2 rowbytes%=rowbytes%*sampperpix%
  2012.  planar%<>1 
  2013.  rgb<>0 
  2014. 42,"Can't do this style of TIFF yet" 
  2015.  planar%=
  2016.  compression<2 
  2017. )Tcache%=
  2018. :stripptr=-1:r$="FN8":
  2019.  input=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24"
  2020.  input=32 rbo%=0:gbo%=1:bbo%=2:step24=4:r$="FN24":r%()=F-r%():g%()=F-g%():b%()=F-b%():input=24
  2021.  compression=5 
  2022. compression=32773 
  2023. --cache%=
  2024. :cachebytes%=rowbytes%*striprows%
  2025. .0plbuff%=
  2026. dim(rowbytes%):rowstogo%=striprows%
  2027.  input=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+
  2028. r$,3)+10):step24=3:rbo%=-1
  2029. 1.buff%=
  2030. dim(rowbytes%):rowstogo%=striprows%
  2031.  input=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+
  2032. r$,3)+10):step24=3
  2033.  scale% 
  2034. S%=resunit:
  2035.  S%=2 S%=90
  2036.  S%=3 S%=35
  2037. 8,xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S%
  2038. 9,ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S%
  2039.  r$="FN1500" r$="FN8"
  2040.  1600
  2041. #c%=12:camg=0:planar%=
  2042. >*S$=
  2043. #c%:S%=
  2044.  "BMHD":sx%=
  2045. beHW:sy%=
  2046. beHW:S%=
  2047. W:planes%=
  2048. #c%:masking%=
  2049. #c%=1
  2050. A6compression=
  2051. #c%:S%=
  2052. HW:U%=
  2053. #c%:V%=
  2054. #c%:S%=
  2055.  scale% ymul%=ymul%*V%:ydiv%=ydiv%*U%
  2056.  I%=0
  2057. (1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:
  2058. :g%()=r%():b%()=r%()
  2059.  "CMAP":S%=
  2060. #c%+S%:
  2061.  I%=0
  2062. (1<<planes%)-1:r%(I%)=(
  2063. #c%>>4)/15*F
  2064. E1g%(I%)=(
  2065. #c%>>4)/15*F:b%(I%)=(
  2066. #c%>>4)/15*F:
  2067. #c%=S%:
  2068.  info% 
  2069. "Warning: truncated IFF CMAP information to 4 bits"
  2070.  "CAMG":camg=
  2071.  info% 
  2072. "Amiga viewport mode ";~camg
  2073.  "BODY":st%=
  2074.  info% 
  2075. "Ignoring IFF property "S$" size ";S%
  2076. #c%+S%
  2077.  S$="BODY":
  2078.  compression info$="Compressed " 
  2079.  info$=""
  2080. M,ham=(camg 
  2081.  &800)<>0:
  2082.  ham info$+="HAM "
  2083. N5half=(camg 
  2084.  &80)<>0:
  2085.  half info$+="half-bright "
  2086.  half half%=1<<planes%-1:
  2087.  I%=0
  2088. half%-1:r%(I%+half%)=r%(I%)/2:g%(I%+half%)=g%(I%)/2:b%(I%+half%)=b%(I%)/2:
  2089. PEinfo$+="IFF file, "+
  2090.  sx%+" by "+
  2091.  sy%+" pixels, "+
  2092. bits(planes%)
  2093.  masking% info$+=" with mask (ignored)"
  2094. R7rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%
  2095. S9pbuff%=
  2096. dim(sx%):r$="FN"+
  2097. (1600+compression):cache%=
  2098.  compression 
  2099. U(cachebytes%=
  2100. :plbuff%=
  2101. dim(plbytes%)
  2102. WRrealrowbytes%=rowbytes%:rowbytes%=plbytes%:
  2103.  masking% rowbytes%+=realrowbytes%
  2104. #c%=st%
  2105.  1700
  2106. [Bsx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=
  2107. \3buff%=
  2108. dim(80*4):pbuff%=
  2109. dim(640):G=F/3:H=F*2/3
  2110. ](r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F
  2111. ^(g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F
  2112. _(b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F
  2113. `Vmasking%=
  2114. :r$="FN1600":st%=16:
  2115. #c%=16:cache%=
  2116. :realrowbytes%=80:rowbytes%=plbytes%
  2117. aSinfo$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)"
  2118.  1800
  2119. c?sx%=72*8:sy%=720:quant%=1:input=1:
  2120. #c%=st%:plbuff%=
  2121. dim(72)
  2122. cache%=
  2123. :cachebytes%=
  2124. eQr%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=
  2125. :rowbytes%=72:r$="FN1501":rowstogo%=-1
  2126.  scale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72
  2127. g>info$="MacPaint file, 576 by 720 bits, creator id "+
  2128. S$,4)
  2129.  1850
  2130. #c%=552
  2131. done%=
  2132. code%=
  2133. beHW:
  2134.  code% 
  2135.  &01:
  2136. pCrowbytes%=
  2137. beHW:
  2138. (rowbytes% 
  2139. &8000)=0 
  2140. 42,"PICT without Pixmap"
  2141. q3sy%=
  2142. beHW:sx%=
  2143. beHW:sy%=
  2144. beHW-sy%:sx%=
  2145. beHW-sx%
  2146. r<junk%=
  2147. HW:packtype%=
  2148. beHW:junk%=
  2149. W:resx%=
  2150. beW:resy%=
  2151. beHW<>0 
  2152. 42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky"
  2153. t&bpp%=
  2154. beHW:junk%=
  2155. beHW:junk%=
  2156. u$junk%=
  2157. beW:junk%=
  2158. beW:junk%=
  2159. junk%=
  2160. beW:junk%=
  2161. w`C%=
  2162. beHW:
  2163.  I%=0
  2164. C%:J%=
  2165. beHW:r%(J%)=
  2166. beHW/65535*F:g%(J%)=
  2167. beHW/65535*F:b%(J%)=
  2168. beHW/65535*F:
  2169. done%=
  2170.  &9A:junk%=
  2171. W:rowbytes%=
  2172. beHW:
  2173. (rowbytes% 
  2174. &8000)=0 
  2175. 42,"PICT without Pixmap"
  2176. z3sy%=
  2177. beHW:sx%=
  2178. beHW:sy%=
  2179. beHW-sy%:sx%=
  2180. beHW-sx%
  2181. {<junk%=
  2182. HW:packtype%=
  2183. beHW:junk%=
  2184. W:resx%=
  2185. beW:resy%=
  2186. beHW<>16 
  2187. 42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect"
  2188. }'bpp%=
  2189. beHW:comps%=
  2190. beHW:junk%=
  2191. junk%=
  2192. beW:junk%=
  2193. junk%=
  2194. beHW:junk%=
  2195.  bpp%>16 
  2196. nopal 
  2197.  J%=2^(bpp%
  2198.  I%=0
  2199. J%-1:r%(I%)=I%/(J%-1)*F:
  2200. :g%()=r%():b%()=r%()
  2201.  bpp%=32 
  2202.  comps%=3 bpp%=24:rowbytes%=3*sx%
  2203. done%=
  2204. 42,"ChangeFSI can't understand Mac PICT2 code "+
  2205. ~code%
  2206.  done%
  2207. 3junk%=
  2208. beHW:junk%=
  2209. beHW:junk%=
  2210. beHW:junk%=
  2211. 3junk%=
  2212. beHW:junk%=
  2213. beHW:junk%=
  2214. beHW:junk%=
  2215. junk%=
  2216. Ncache%=
  2217. :cachebytes%=
  2218. :bigendianbits=
  2219. :st%=
  2220. #c%:rowbytes%=rowbytes%
  2221. &8000
  2222.  scale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy%
  2223. Binfo$="Mac PICT2, "+
  2224.  sx%+" by "+
  2225.  sy%+" pixels, "+
  2226. bits(bpp%)
  2227. &plbuff%=
  2228. dim(rowbytes%):
  2229.  bpp%>8 
  2230. Trbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24
  2231.  comps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2
  2232.  1900
  2233. #c%=1:C%=
  2234.  E%<>1 
  2235.  42,"ZSoft .PCX file with unknown encoding"
  2236. #c%:sx%=
  2237. HW:sy%=
  2238. HW:sx%=
  2239. HW+1-sx%:sy%=
  2240. HW+1-sy%
  2241.  scale% xmul%=xmul%*90:xdiv%=xdiv%*
  2242. HW:ymul%=ymul%*90:ydiv%=ydiv%*
  2243. #c%=65:planes%=
  2244. #c%:planar%=planes%>1:rowbytes%=
  2245. HW:bpp%=E%*planes%
  2246. pcxpal=16:
  2247.  bpp%>4 
  2248.  C%=5 
  2249. #c%-769:
  2250. #c%=12 pcxpal=
  2251. #c%-768
  2252. #c%=pcxpal:E%=0:
  2253.  C%=0
  2254. (1<<bpp%)*3-1:E%=E%
  2255.  info% 
  2256. ".PCX palette mask established at ";~E%
  2257.  E%=0 
  2258.  C%=0
  2259. (1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:
  2260. :g%()=r%():b%()=r%()
  2261. #c%=pcxpal:
  2262.  C%=0
  2263. (1<<bpp%)-1
  2264. Er%(C%)=(
  2265. E%)/E%*F:g%(C%)=(
  2266. E%)/E%*F:b%(C%)=(
  2267. E%)/E%*F
  2268. rewind
  2269. Lplbytes%=rowbytes%*planes%:plbuff%=
  2270. dim(plbytes%):cache%=
  2271. :cachebytes%=
  2272.  planar% pbuff%=
  2273. dim(sx%) 
  2274.  input=bpp%:bigendianbits=
  2275. :r$="FN1100"
  2276. Hinfo$="ZSoft .PCX file, "+
  2277.  sx%+" by "+
  2278.  sy%+" pixels, "+
  2279. bits(bpp%)
  2280.  2000
  2281. #c%=0:L%=
  2282. #c%:C%=
  2283. #c%:I%=
  2284. #c%:J%=
  2285. HW:K%=
  2286. HW:M%=
  2287. Dsx%=
  2288. W:sx%=
  2289. HW:sy%=
  2290. HW:B%=
  2291. #c%:ID%=
  2292. &10 hflip%=
  2293. hflip%
  2294. (ID% 
  2295. &20)=0 vflip%=
  2296. vflip%
  2297. #c%+L%:
  2298.  M%=&18 
  2299.  C%=J%
  2300. 9b%(C%)=
  2301. #c%/255*F:g%(C%)=
  2302. #c%/255*F:r%(C%)=
  2303. #c%/255*F
  2304. nopal
  2305.  1,2,3:cache%=
  2306.  B%>8 
  2307.  B%>16 
  2308. Linput=24:bbo%=0:gbo%=1:rbo%=2:step24=B%
  2309. 8:r$="FN24":rowbytes%=step24*sx%
  2310. rowbytes%=sx%*2
  2311.  rpal%(255),gpal%(255):input=16:step24=2:r$="FN16"
  2312.  C%=0
  2313. &gpal%(C%)=(C%>>5)<<8 
  2314. 31)<<16
  2315. %rpal%(C%)=(C%>>2)
  2316. 3)<<11
  2317.  C%=0
  2318. 31:r%(C%)=C%/31*F:
  2319. :g%()=r%():b%()=r%()
  2320. r$="FN8":rowbytes%=sx%
  2321. Kinfo$="Truevision TGA image, "+
  2322.  sx%+" by "+
  2323.  sy%+" pixels, "+
  2324. bits(B%)
  2325.  9,10,11:step24=B%
  2326. 8:rowbytes%=step24*sx%:buff%=
  2327. dim(rowbytes%)
  2328.  B%>8 
  2329.  B%>16 
  2330. :input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002"
  2331.  rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001"
  2332.  C%=0
  2333. &gpal%(C%)=(C%>>5)<<8 
  2334. 31)<<16
  2335. %rpal%(C%)=(C%>>2)
  2336. 3)<<11
  2337.  C%=0
  2338. 31:r%(C%)=C%/31*F:
  2339. :g%()=r%():b%()=r%()
  2340. Oinfo$="Truevision TGA RLE image, "+
  2341.  sx%+" by "+
  2342.  sy%+" pixels, "+
  2343. bits(B%)
  2344.  2100
  2345. ?quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=
  2346. :r$="FN16"
  2347.  rpal%(255),gpal%(255):input=16:step24=2
  2348.  C%=0
  2349.  gpal%(C%)=C%>>3 
  2350. 7)<<11
  2351. %rpal%(C%)=(C%
  2352. 7)<<8 
  2353.  (C%>>3)<<16
  2354.  C%=0
  2355. 31:r%(C%)=C%/31*F:
  2356. :b%()=r%()
  2357.  C%=0
  2358. 63:g%(C%)=C%/63*F:
  2359.  scale% ymul%=ymul%*2
  2360. Hinfo$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":
  2361. #c%=7
  2362.  2200
  2363. 9quant%=8:step24=1:
  2364. #c%=0:s$=
  2365. #c%:E%=
  2366. s$,":"):st%=
  2367. ;sx%=
  2368. s$,E%+1):sy%=
  2369. s$,E%+2+
  2370.  sx%):
  2371. nopal:input=24
  2372. Arowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=
  2373. :r$="FN24"
  2374. Iinfo$="Irlam image, "+
  2375.  sx%+" by "+
  2376.  sy%+" pixels, 24 bits per pixel"
  2377.  2250
  2378. #c%=16:sx%=
  2379. W:sy%=
  2380.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2381.  C%=0
  2382. 255:D%=C%
  2383. table%(C%)=(D%-16)/219*F
  2384. 128 D%-=256
  2385. )r%(C%)=
  2386. (D%/160*F):b%(C%)=
  2387. (D%/126*F)
  2388. >g%(C%)=
  2389. (-D%/160*rwt/gwt*F):gpal%(C%)=
  2390. (-D%/126*bwt/gwt*F)
  2391. ,table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  2392. 5st%=32:
  2393. #c%=32:cache%=
  2394. :rowbytes%=2*sx%:input=411
  2395. >info$="Irlam YUV 4:1:1 file "+
  2396.  sx%+" by "+
  2397.  sy%+" pixels"
  2398.  2300
  2399. #c%=6:sx%=
  2400. HW:sy%=
  2401. HW:D%=
  2402. #c%:ncolors%=
  2403. #c%:input=24
  2404. ;vflip%=
  2405. vflip%:quant%=
  2406. #c%:ncmap%=
  2407. #c%:cmaplen%=1<<
  2408. nopal:back%=
  2409. dim(4):!back%=0
  2410. clrfirst%=D%
  2411. 2)=0 
  2412.  I%=0
  2413. ncolors%-1:back%?I%=
  2414. (ncolors%
  2415. 1)=0 
  2416. 4 alpha%=
  2417. dim(sx%)
  2418.  ncmap%>0 
  2419.  I%=0
  2420. cmaplen%-1:r%(I%)=
  2421. HW/&FF00*F:
  2422.  I%=0
  2423. cmaplen%-1:g%(I%)=
  2424. HW/&FF00*F:
  2425.  I%=0
  2426. cmaplen%-1:b%(I%)=
  2427. HW/&FF00*F:
  2428. #c%+1
  2429. Hst%=
  2430. #c%:buff%=
  2431. dim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx%
  2432. rewind
  2433. Rinfo$="Utah rle image, "+
  2434.  sx%+" by "+
  2435.  sy%+" pixels, "+
  2436. bits(ncolors%*quant%)
  2437.  2400
  2438. #c%=riffoff%+&0a:st%=
  2439. W:pal%=
  2440. W:sx%=
  2441. W:sy%=
  2442.  pal% 
  2443. #c%=riffoff%+&18:input=
  2444. HW:compression=0
  2445. #c%=riffoff%+&1c:input=
  2446. HW:compression=
  2447. #c%=riffoff%+&26:xppm=
  2448. W:yppm=
  2449.  xppm<>0 
  2450.  yppm<>0 
  2451.  scale%<>0 
  2452. %xdiv%=xdiv%*xppm:xmul%=xmul%*3543
  2453. %ydiv%=ydiv%*yppm:ymul%=ymul%*3543
  2454.  42,"Unknown .BMP variant ("+
  2455.  pal%+")"
  2456. "bigendianbits=
  2457. :vflip%=
  2458. vflip%
  2459.  input 
  2460.  1:rowbytes%=sx%+7>>3
  2461.  4:rowbytes%=sx%+1>>1
  2462.  8:rowbytes%=sx%
  2463.  16:rowbytes%=sx%*2:r$="FN16":step24=2
  2464.  rpal%(255),gpal%(255)
  2465. %rmask%=&7c00:gmask%=42:bmask%=-42
  2466.  compression=3 
  2467. #c%=riffoff%+14+pal%:rmask%=
  2468. W:gmask%=
  2469. W:bmask%=
  2470. W:compression=0
  2471.  rmask%=&7c00 
  2472.  C%=0
  2473. &gpal%(C%)=(C%>>5)<<8 
  2474. 31)<<16
  2475. %rpal%(C%)=(C%>>2)
  2476. 3)<<11
  2477.  C%=0
  2478. 31:r%(C%)=C%/31*F:
  2479. :g%()=r%():b%()=r%()
  2480.  rmask%=&f800 
  2481.  C%=0
  2482. %&gpal%(C%)=(C%>>5)<<8 
  2483. 31)<<16
  2484. &%rpal%(C%)=(C%>>3)
  2485. 7)<<11
  2486.  C%=0
  2487. 31:r%(C%)=C%/31*F:
  2488. :b%()=r%()
  2489.  C%=0
  2490. 63:g%(C%)=C%/63*F:
  2491.  24,32
  2492. ,"rbo%=2:gbo%=1:bbo%=0:r$="FN24"
  2493.  C%=0
  2494. 255:r%(C%)=C%/255*F:
  2495. :g%()=r%():b%()=r%()
  2496. .1r$="FN24":step24=input/8:rowbytes%=sx%*step24
  2497. /"rmask%=-1:gmask%=42:bmask%=-42
  2498.  compression=3 
  2499. #c%=riffoff%+14+pal%:rmask%=
  2500. W:gmask%=
  2501. W:bmask%=
  2502. W:compression=0
  2503.  rmask%=&FF 
  2504.  rbo%=0:gbo%=1:bbo%=2
  2505.  gmask%=&FF 
  2506.  gbo%=0:bbo%=1:rbo%=2
  2507.  bmask%=&FF 
  2508.  bbo%=0:gbo%=1:rbo%=2
  2509. input=24
  2510.  42,".BMP file of unusual depth ("+
  2511.  input+")"
  2512.  input<=8 
  2513. #c%=riffoff%+14+pal%:r$="FN8"
  2514.  C%=0
  2515. 2^input-1
  2516. :@b%(C%)=
  2517. #c%/255*F:g%(C%)=
  2518. #c%/255*F:r%(C%)=
  2519. #c%/255*F:
  2520.  compression 
  2521.  0:info$="Uncompressed "
  2522.  1:info$="RLE8 compressed ":r$="FN2401"
  2523.  2:info$="RLE4 compressed ":r$="FN2402"
  2524.  42,".BMP compression type not supported ("+
  2525.  compression+")"
  2526. rowbytes%=rowbytes%+3
  2527.  compression<>0 cachebytes%=
  2528. :plbuff%=
  2529. dim(rowbytes%)
  2530. cache%=
  2531. #c%=riffoff%+st%
  2532. FQinfo$+="Windows 3.0 .BMP image, "+
  2533.  sx%+" by "+
  2534.  sy%+" pixels, "+
  2535. bits(input)
  2536.  2500
  2537. #c%=0:s$="":C%=
  2538.  C%<>0 s$+=
  2539.  C%:C%=
  2540. I8s$+=" version "+
  2541. W:sx%=
  2542. W:sy%=
  2543. W:input=
  2544. W:cache%=
  2545. Jainfo$="!Translator Clear format made by "+s$+", "+
  2546.  sx%+" by "+
  2547.  sy%+" pixels, "+
  2548. bits(input)
  2549.  input>8 
  2550. nopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24"
  2551.  C%=0
  2552. 2^input-1
  2553. O9r%(C%)=
  2554. #c%/255*F:g%(C%)=
  2555. #c%/255*F:b%(C%)=
  2556. #c%/255*F
  2557. Q"input=8:r$="FN8":rowbytes%=sx%
  2558.  2600
  2559. #c%=0:C%=
  2560.  0:sx%=320:sy%=200:planes%=4
  2561.  1:sx%=640:sy%=200:planes%=2
  2562.  2:sx%=640:sy%=400:planes%=1
  2563. 42,"ChangeFSI knows nothing of "+
  2564.  C%+" type Degas files"
  2565.  I%=0
  2566. (1<<input)-1:D%=
  2567. beHW:r%(I%)=(D%>>8
  2568. 7)/7*F:g%(I%)=(D%>>4
  2569. 7)/7*F:b%(I%)=(D%
  2570. 7)/7*F:
  2571. ]<cache%=
  2572. :planar%=
  2573. :masking%=
  2574. :st%=34:
  2575. #c%=34:r$="FN1600"
  2576. ^Hrowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=
  2577. dim(sx%)
  2578. 128 r$="FN1601":flag=1600:cachebytes%=
  2579. :plbuff%=
  2580. dim(plbytes%) 
  2581.  realrowbytes%=2:rowbytes%=plbytes%
  2582. `Einfo$="Degas file "+
  2583.  sx%+" by "+
  2584.  sy%+" pixels, "+
  2585. bits(planes%)
  2586.  2700
  2587. #c%=4:sx%=
  2588. HW:sy%=
  2589.  &AF:rowbytes%=sx%:cache%=
  2590. :r$="FN8":st%=&30A
  2591.  42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!"
  2592.  C%=0
  2593. 2^input-1
  2594. h6r%(C%)=
  2595. #c%/63*F:g%(C%)=
  2596. #c%/63*F:b%(C%)=
  2597. #c%/63*F
  2598. #c%=st%
  2599. kEinfo$="ColoRIX file "+
  2600.  sx%+" by "+
  2601.  sy%+" pixels, "+
  2602. bits(input)
  2603.  2800
  2604. #c%=0:
  2605. fits:
  2606. s$,8) 
  2607.  "SIMPLE  ":
  2608. s$,30,1)<>"T" 
  2609. 42,"ChangeFSI can only read Simple FITS format"
  2610.  "BITPIX  ":input=
  2611. s$,10)
  2612.  "NAXIS   ":
  2613. s$,10)<>2 
  2614. 42,"ChangeFSI can only read 2d FITS images"
  2615.  "NAXIS1  ":sx%=
  2616. s$,10)
  2617.  "NAXIS2  ":sy%=
  2618. s$,10)
  2619.  "END     "
  2620.  info% 
  2621. "Ignoring FITS record "s$
  2622. s$,8)="END     "
  2623. w.st%=(
  2624. 2880 + 1)*2880:cache%=
  2625. #c%=st%
  2626.  input 
  2627.  8:r$="FN8":rowbytes%=sx%:
  2628. nopal
  2629.  16:rowbytes%=2*sx%:
  2630.  rpal%(255),gpal%(255):step24=2:r$="FN16"
  2631.  C%=0
  2632. gpal%(C%)=C%<<8
  2633. rpal%(C%)=C%
  2634. :cheat%=0:
  2635.  invert% cheat%=F
  2636.  C%=0
  2637. 255:r%(C%)=cheat%+C%/65535*F:g%(C%)=((C%
  2638. &80)<<8)/65535*F:b%(C%)=cheat%:
  2639. :rwt=1:gwt=1:bwt=1
  2640.  42,"ChangeFSI can't read a FITS image with this number of bits per pixel"
  2641. Binfo$="FITS file "+
  2642.  sx%+" by "+
  2643.  sy%+" pixels, "+
  2644. bits(input)
  2645.  2900
  2646. #c%=4:sx%=
  2647. beHW:sy%=
  2648. beHW:
  2649. #c%=&42:input=
  2650. beHW:C%=
  2651. =rowbytes%=
  2652. beHW:C%=
  2653. beW:st%=
  2654. #c%=st%:r$="FN8":
  2655. nopal
  2656.  rpal%(15),gpal%(15),bpal%(15)
  2657. Irpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0
  2658. Igpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0
  2659. Ibpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0
  2660.  C%=&80
  2661. &8F:r%(C%)=rpal%(C%-&80)/255*F:g%(C%)=gpal%(C%-&80)/255*F:b%(C%)=bpal%(C%-&80)/255*F:
  2662. :cache%=
  2663. Hinfo$="Apollo GPR file "+
  2664.  sx%+" by "+
  2665.  sy%+" pixels, "+
  2666. bits(input)
  2667.  3000
  2668. Hsx%=720:sy%=
  2669. #c%/1440:
  2670.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2671.  C%=0
  2672. table%(C%)=(C%-16)/219*F
  2673. >r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F
  2674. ?g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F
  2675. =b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F
  2676.  C%=0
  2677. table%(C%)=(C%-16)/219*F
  2678. 5r%(C%)=
  2679. ((C%-128)/160*F):b%(C%)=
  2680. ((C%-128)/126*F)
  2681. Jg%(C%)=
  2682. (-(C%-128)/160*rwt/gwt*F):gpal%(C%)=
  2683. (-(C%-128)/126*bwt/gwt*F)
  2684. <table%()=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2685. :st%=0:
  2686. #c%=0:cache%=
  2687. :rowbytes%=1440:input=422:gamma=1
  2688.  scale% ymul%=ymul%*2
  2689. <info$="CCIR601 4:2:2 file "+
  2690.  sx%+" by "+
  2691.  sy%+" pixels"
  2692.  3100
  2693. $quant%=8:
  2694. #c%=0:a$=
  2695. #c%:st%=
  2696. !sx%=
  2697.  a$:sy%=
  2698. a$," ")))
  2699. nopal:input=24:step24=3:rowbytes%=sx%*3
  2700. 4rbo%=0:gbo%=1:bbo%=2:cache%=
  2701. :flag=700:r$="FN24"
  2702. Sinfo$="!RayShade 'RGB' image, "+
  2703.  sx%+" by "+
  2704.  sy%+" pixels, 24 bits per pixel"
  2705.  3200
  2706. quant%=8:
  2707. #c%=0:st%=0
  2708. s$,"_")+1,1)
  2709.  sx% 
  2710.  5:sx%=768:sy%=512
  2711.  2:sx%=3072:sy%=2048
  2712.  1:sx%=1536:sy%=1024
  2713. nopal:input=24:step24=3:rowbytes%=sx%*3
  2714. 4rbo%=0:gbo%=1:bbo%=2:cache%=
  2715. :flag=700:r$="FN24"
  2716. Ninfo$="Kodak /RGB image, "+
  2717.  sx%+" by "+
  2718.  sy%+" pixels, 24 bits per pixel"
  2719.  3300
  2720. #c%=0:input=
  2721. GET,2)
  2722. GET:sx%=
  2723.  s$:sy%=
  2724. s$," ")):
  2725.  sy%=0 sy%=
  2726. cache%=
  2727.  input 
  2728.  4:input=1:r$="FN8":r%(0)=F:g%()=r%():b%()=r%():bigendianbits=
  2729. rowbytes%=(sx%+7)
  2730.  5:input=8:r$="FN8":E%=
  2731.  C%=0
  2732. E%:r%(C%)=C%/E%*F:
  2733. :g%()=r%():b%()=r%()
  2734. rowbytes%=sx%
  2735.  6:input=24:r$="FN24":E%=
  2736. GET:step24=3:rbo%=0:gbo%=1:bbo%=2
  2737.  C%=0
  2738. E%:r%(C%)=C%/E%*F:
  2739. :g%()=r%():b%()=r%()
  2740. rowbytes%=sx%*3
  2741. #c%:flag=700
  2742. Dinfo$+="pbm image, "+
  2743.  sx%+" by "+
  2744.  sy%+" pixels, "+
  2745. bits(input)
  2746. s$,1)<>"#":=s$
  2747.  3400
  2748. #c%=0:s$=
  2749. GET:input=16:quant%=5
  2750. GET:sx%=
  2751.  s$:sy%=
  2752. s$," ")):s$=
  2753.  rpal%(255),gpal%(255):input=16:step24=2
  2754.  C%=0
  2755. "gpal%(C%)=(C%>>5)<<8 
  2756. +rpal%(C%)=((C%>>2)
  2757. 31)<<16 
  2758. 3)<<11
  2759. cache%=
  2760. :r$="FN16"
  2761.  C%=0
  2762. 31:r%(C%)=C%/31*F:
  2763. :g%()=r%():b%()=r%()
  2764. %rowbytes%=sx%*2:st%=
  2765. #c%:flag=700
  2766. Cinfo$="p15 image, "+
  2767.  sx%+" by "+
  2768.  sy%+" pixels, "+
  2769. bits(input)
  2770.  3450
  2771. #c%=0:info$=
  2772. 4ybits%=
  2773. info$,
  2774. info$," ")):ymax%=(1<<ybits%)-1
  2775. ;ubits%=
  2776. info$,
  2777. info$,"Y ")+1):umax%=(1<<(ubits%-1))-1
  2778. ;vbits%=
  2779. info$,
  2780. info$,"U ")+1):vmax%=(1<<(vbits%-1))-1
  2781. GET:sx%=
  2782.  s$:sy%=
  2783. s$," "))
  2784.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2785.  C%=0
  2786. ymax%:table%(C%)=C%/ymax%*F:
  2787. D%=(1<<ubits%)-1
  2788.  C%=0
  2789. D%:d=C%/umax%:
  2790.  d>1 d=-(D%-C%)/umax%
  2791. ;b%(C%)=
  2792. (d*(1-bwt)*F):gpal%(C%)=
  2793. (-d*(1-bwt)*bwt/gwt*F)
  2794. D%=(1<<vbits%)-1
  2795.  C%=0
  2796. D%:d=C%/vmax%:
  2797.  d>1 d=-(D%-C%)/vmax%
  2798. 8r%(C%)=
  2799. (d*(1-rwt)*F):g%(C%)=
  2800. (-d*(1-rwt)*rwt/gwt*F)
  2801. ;rowbytes%=sx%*2:st%=
  2802. #c%:cache%=
  2803. :r$="FN2250":input=555
  2804. ,info$+=", "+
  2805.  sx%+" by "+
  2806.  sy%+" pixels"
  2807.  3500
  2808. Aquant%=1:
  2809. #c%=6:E%=
  2810. HW:sx%=
  2811. HW:sx%=
  2812. HW:sy%=
  2813. HW:st%=
  2814. HW:st%=
  2815. 4rowbytes%=sx%/8+1
  2816. 1:cache%=
  2817. :st%+=
  2818. #c%=st%
  2819. ,r$="FN8":input=1:r%(0)=F:g%(0)=F:b%(0)=F
  2820. Minfo$="Pocketbook bitmap, "+
  2821.  sx%+" by "+
  2822.  sy%+" pixels, 1 bit per pixel"
  2823. 9planar%=
  2824. :planes%=2:r$="FN1600":input=8:cachebytes%=
  2825. ?r%(0)=F:r%(1)=(F/3)*2:r%(2)=F/3:r%(3)=0:g%()=r%():b%()=r%()
  2826. Hplbytes%=rowbytes%*planes%:buff%=
  2827. dim(plbytes%*sy%):pbuff%=
  2828. dim(sx%)
  2829. realrowbytes%=rowbytes%*sy%
  2830. Pinfo$="PocketbookII bitmap, "+
  2831.  sx%+" by "+
  2832.  sy%+" pixels, 2 bits per pixel"
  2833.  42,"Unknown Pocketbook PIC format"
  2834.  3600
  2835. Bpcdblk%=
  2836. dim(40):
  2837. &20023,"ChangeFSI$PCDindex",pcdblk%,20 
  2838.  pcdblk%?Z=13:pcdindex%=
  2839. $pcdblk% 
  2840.  pcdindex%=3
  2841. "PhotoCD_Open",1,c%,1 
  2842.  pcdh%:
  2843. "PhotoCD_GetCount",pcdh% 
  2844. (Z>>pcdindex%)=0 
  2845. 42,"Desired resolution unavailable"
  2846. "PhotoCD_GetRotation",pcdh% 
  2847. ,,pcdtr%
  2848. "PhotoCD_GetSize",pcdh%,,pcdindex% 
  2849. ,,,,sx%,sy%
  2850. )pcdblk%!0=0:pcdblk%!8=sx%:pcdblk%!4=0
  2851. 7pcdblk%!16=0:pcdblk%!20=2:pcdblk%!24=1:pcdblk%!28=3
  2852.  pcdtr% 
  2853.  &80000000:hflip%=
  2854. hflip%
  2855.  rotate% 
  2856.  0:rotate%=1
  2857.  -1:rotate%=0
  2858.  1:rotate%=0:vflip%=
  2859. vflip%:hflip%=
  2860. hflip%
  2861.  &8000005A
  2862.  rotate% 
  2863.  0:rotate%=1:vflip%=
  2864. vflip%
  2865.  -1:rotate%=0:vflip%=
  2866. vflip%
  2867.  1:rotate%=0:hflip%=
  2868. hflip%
  2869.  180:hflip%=
  2870. hflip%:vflip%=
  2871. vflip%
  2872.  &800000B4:vflip%=
  2873. vflip%
  2874.  rotate% 
  2875.  0:rotate%=-1
  2876.  1:rotate%=0
  2877.  -1:rotate%=0:vflip%=
  2878. vflip%:hflip%=
  2879. hflip%
  2880.  &8000010E
  2881.  rotate% 
  2882.  0:rotate%=-1:vflip%=
  2883. vflip%
  2884.  1:rotate%=0:vflip%=
  2885. vflip%
  2886.  -1:rotate%=0:hflip%=
  2887. hflip%
  2888.  PANIC
  2889. @input=24:step24=3:rbo%=0:gbo%=1:bbo%=2:pcdcachesize%=32*1024
  2890. Arowbytes%=sx%*3:
  2891. nopal:cache%=
  2892. :pcdcache%=
  2893. dim(pcdcachesize%)
  2894. Kinfo$="PhotoCD image, "+
  2895.  sx%+" by "+
  2896.  sy%+" pixels, 24 bits per pixel"
  2897.  3700
  2898. "<ChangeFSI$Dir>.CFSIjpeg":jpeg%=
  2899. 12,4,A%,jpeg%,
  2900. Ddatacache%=
  2901. cachedim(
  2902. #c%):
  2903.  datacache%=-1 datacache%=
  2904. #c%=0:
  2905. 12,4,c%,datacache%,
  2906. RA%=datacache%:B%=jpegblk%:C%=jpegblk%+4:D%=jpegblk%+8:E%=jpegblk%+12:
  2907.  jpeg%+8
  2908.  &B%=jpegblk%!12:jpegspace%=
  2909. dim(B%)
  2910. !'C%=datacache%:A%=jpegspace%:D%=
  2911.  jpeg%:cache%=
  2912. 42,"JPEG code error: "+
  2913. #5sx%=A%!20:sy%=A%!24:input=8*A%?28:
  2914. nopal:step24=4
  2915. $Dinfo$="JFIF image, "+
  2916.  sx%+" by "+
  2917.  sy%+" pixels, "+
  2918. bits(input)
  2919. %&jpegy%=sy%:r$="FN"+
  2920. (3700+input)
  2921.  3800
  2922. #c%=24:sx%=
  2923. W:sy%=
  2924.  scale% ymul%=ymul%*2
  2925.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2926.  C%=0
  2927.  C%<128 table%(C%)=C%/127*F
  2928. D%=C%:
  2929. 128 D%-=256
  2930. -)r%(C%)=
  2931. (D%/160*F):b%(C%)=
  2932. (D%/126*F)
  2933. .>g%(C%)=
  2934. (-D%/160*rwt/gwt*F):gpal%(C%)=
  2935. (-D%/126*bwt/gwt*F)
  2936. #c%=52:st%=
  2937. #c%=64:cache%=
  2938. :rowbytes%=2*sx%:input=411
  2939. 1Hinfo$="Uncompressed Techno-I YUV file "+
  2940.  sx%+" by "+
  2941.  sy%+" pixels"
  2942.  3900
  2943. #c%=8:sx%=
  2944. W:sy%=
  2945. W:st%=16:quant%=12:step24=6
  2946.  C%=0
  2947. 4095:r%(C%)=C%/4095*F:
  2948. :g%()=r%():b%()=r%()
  2949. 5Dinput=48:rowbytes%=sx%*6:cache%=
  2950. :r$="FN24":rbo%=0:gbo%=2:bbo%=4
  2951. 6Rinfo$="Ronald Alpiar format, "+
  2952.  sx%+" by "+
  2953.  sy%+" pixels, 36 bits per pixel"
  2954.  3905
  2955. #c%=8:sx%=
  2956. W:sy%=
  2957. W:st%=16:quant%=16:step24=6
  2958.  C%=0
  2959. 65535:r%(C%)=C%/65535*F:
  2960. :g%()=r%():b%()=r%()
  2961. :Dinput=48:rowbytes%=sx%*6:cache%=
  2962. :r$="FN24":rbo%=0:gbo%=2:bbo%=4
  2963. ;Rinfo$="Ronald Alpiar format, "+
  2964.  sx%+" by "+
  2965.  sy%+" pixels, 48 bits per pixel"
  2966. =?st%=0:
  2967. #c%=0:sx%=160:sy%=128:input=8:cache%=
  2968. :rowbytes%=sx%
  2969.  C%=0
  2970. 255:r%(C%)=C%/255*F:
  2971. :g%()=r%():b%()=r%():r$="FN8"
  2972. ?Ninfo$="The number of the beast, 160 by "+
  2973.  sy%+" pixels, 8 bits per pixel"
  2974.  info% 
  2975.  info$
  2976. ("set ChangeFSI$X "+
  2977.  sx%):
  2978. ("set ChangeFSI$Y "+
  2979.  sy%)
  2980.  hourg%=
  2981. "Hourglass_On" 
  2982. "Hourglass_Off"
  2983. hour%=&406c4
  2984.  m=-9 
  2985.  m=-10 
  2986. "XOS_CLI","rmensure CompressJPEG 0 rmload System:Modules.jcompmod"
  2987. "XOS_CLI","rmensure CompressJPEG 0 IF ""<ChangeFSI$Dir>"" <> """" THEN rmload <ChangeFSI$Dir>.jcompmod"
  2988. HB*rmensure CompressJPEG 0 ERROR Can't find CompressJPEG module.
  2989.  invert% r%()=F-r%():g%()=F-g%():b%()=F-b%()
  2990.  xdiv% 
  2991. reduce(xmul%,xdiv%)
  2992.  ydiv% 
  2993. reduce(ymul%,ydiv%)
  2994.  -1:x%=256:y%=256:ncol=256:
  2995.  scaleo% xdiv%=xdiv%*2:ydiv%=ydiv%*2
  2996.  -2:x%=sx%:y%=sy%:
  2997.  spm=18 ncol=1 
  2998.  ncol=15
  2999.  -3,-5,-6:x%=sx%:y%=sy%:ncol=2^15-1
  3000.  -4,-7,-8:x%=sx%:y%=sy%:ncol=2^24-1
  3001.  -9,-10:x%=sx%:y%=sy%:ncol=2^24-1:
  3002.  m=-9 ncol=256
  3003. 53,m,4 
  3004.  ,,nx:
  3005. 53,m,5 
  3006.  ,,ny:nx=1<<nx:ny=1<<ny
  3007. 53,m,11 
  3008.  ,,x%:
  3009. 53,m,12 
  3010.  ,,y%:x%+=1:y%+=1
  3011. 53,m,3 
  3012.  ,,ncol:
  3013.  scaleo% 
  3014.  rotate% 
  3015. X!xdiv%=xdiv%*ny:ydiv%=ydiv%*nx
  3016.  xdiv% ymul%=ymul%*2
  3017.  ydiv% xmul%=xmul%*2
  3018. \!xdiv%=xdiv%*nx:ydiv%=ydiv%*ny
  3019.  xdiv% xmul%=xmul%*2
  3020.  ydiv% ymul%=ymul%*2
  3021. &62A51,m 
  3022.  r0;V:
  3023. 1)=0 
  3024.  r0=1 
  3025. ncol=255:
  3026.  m$<>"D" m$="R"
  3027.  m=-6 
  3028.  m=-7 
  3029.  m=-8 
  3030. h,nx=
  3031. pnm$,5):ny=
  3032. pnm$,
  3033. pnm$,",",5)+1)
  3034.  scaleo% 
  3035.  rotate% 
  3036.  xdiv% ymul%=ymul%*nx
  3037.  ydiv% xmul%=xmul%*ny
  3038.  xdiv% xmul%=xmul%*nx
  3039.  ydiv% ymul%=ymul%*ny
  3040. q!xdiv%=xdiv%*90:ydiv%=ydiv%*90
  3041.  rotate% 
  3042.  x%,y%
  3043.  xdiv%=0 xdiv%=sx%
  3044.  ydiv%=0 ydiv%=sy%
  3045.  xs$="=" xmul%=x%:xdiv%=sx%
  3046.  ys$="=" ymul%=y%:ydiv%=sy%
  3047.  lock% 
  3048.  xmul%/xdiv%>ymul%/ydiv% xmul%=ymul%:xdiv%=ydiv% 
  3049.  ymul%=xmul%:ydiv%=xdiv%
  3050.  ncol=1 
  3051. "C":xdiv%=xdiv%*4:ydiv%=ydiv%*4
  3052.  A%(16),B%(16)
  3053. A%()=0,&00000001,&08000001,&08000101,&08080101,&08080103,&0C080103,&0C080303,&0C0C0303,&0C0E0303,&0C0E0703,&0E0E0703,&0E0E0707,&0E0F0707,&0E0F0F07,&0F0F0F07,&0F0F0F0F
  3054. B%()=0,&00000008,&01000008,&01000808,&01010808,&0101080C,&0301080C,&03010C0C,&03030C0C,&03070C0C,&03070E0C,&07070E0C,&07070E0E,&070F0E0E,&070F0F0E,&0F0F0F0E,&0F0F0F0F
  3055. 2even_gard=
  3056. dim(17*32*4):odd_gard=
  3057. dim(17*32*4)
  3058.  I%=0
  3059.  J%=0
  3060. 16:even_gard!(J%*32*4+I%*4)=A%(I%)
  3061. B%(J%)<<4:
  3062.  I%=0
  3063.  J%=0
  3064. 16:odd_gard!(I%*32*4+J%*4)=B%(I%)
  3065. A%(J%)<<4:
  3066. "T":xdiv%=xdiv%*3:ydiv%=ydiv%*3
  3067.  A%(9),B%(9)
  3068. @A%()=0,&0001,&4001,&4041,&4043,&40C3,&60C3,&61C3,&71C3,&71C7
  3069. @B%()=0,&0004,&1004,&1104,&1106,&1186,&3186,&31C6,&71C6,&71C7
  3070. 2even_gard=
  3071. dim(10*16*4):odd_gard=
  3072. dim(10*16*4)
  3073.  I%=0
  3074.  J%=0
  3075. 9:even_gard!(J%*16*4+I%*4)=A%(I%)
  3076. B%(J%)<<3:
  3077.  I%=0
  3078.  J%=0
  3079. 9:odd_gard!(I%*16*4+J%*4)=B%(I%)
  3080. A%(J%)<<3:
  3081. "D":xdiv%=xdiv%*2:ydiv%=ydiv%*2
  3082.  A%(4),B%(4)
  3083. A%()=0,&1,&21,&31,&33
  3084. B%()=0,&2,&12,&32,&33
  3085. *even_gard=
  3086. dim(5*8):odd_gard=
  3087. dim(5*8)
  3088.  I%=0
  3089.  J%=0
  3090. 4:even_gard?(J%*8+I%)=A%(I%)
  3091. B%(J%)<<2:
  3092.  I%=0
  3093.  J%=0
  3094. 4:odd_gard?(I%*8+J%)=B%(I%)
  3095. A%(J%)<<2:
  3096. reduce(xmul%,xdiv%):
  3097. reduce(ymul%,ydiv%)
  3098.  xdiv%*ydiv%*255>2^32 xdiv%=xdiv%
  3099. 1:ydiv%=ydiv%
  3100. 1:xmul%=xmul%
  3101. 1:ymul%=ymul%
  3102.  xdiv%*ydiv%*255<2^32
  3103.  info% 
  3104. "Size ratios are x ";xmul%":"xdiv%" y "ymul%":"ydiv%
  3105. 9x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
  3106. order%=x%*y%>sx%*sy%
  3107. code%=
  3108. dim(8192):SP=13
  3109.  cache% 
  3110. cachesize(code%)
  3111.  cachebytes% 
  3112. ;filesize%=
  3113.  cache%>filesize% cache%=filesize%
  3114.  cachebytes%>0 
  3115.  cache%>cachebytes% cache%=cachebytes%
  3116. cacherows%=cache%
  3117. ?filesize%=sy%*rowbytes%:
  3118.  cache%<rowbytes% cache%=rowbytes%
  3119.  cache%>filesize% cache%=filesize%
  3120. Ecacherows%=striprows%:
  3121.  cacherows%<1 cacherows%=cache%
  3122.  rowbytes%
  3123. cache%=cacherows%*rowbytes%
  3124. Hdatacache%=
  3125. cachedim(cache%):
  3126.  datacache%=-1 datacache%=
  3127. dim(cache%)
  3128.  ncol=255 
  3129.  m$<>"D" m$="R"
  3130.  m$="R" 
  3131. (ncol=63 
  3132. m$="") 
  3133. 53,-1,3 
  3134. ,,J%:
  3135.  ncol=255 
  3136. =m J%=ncol
  3137.  ncol=63 
  3138. (m$=""
  3139. m$="R") J%=ncol
  3140.  J%<>ncol 
  3141. close:
  3142. 42,"You must be in a "+
  3143. (ncol+1)+" colour mode to do this"
  3144. J%=ncol:
  3145.  J%=63 J%=255
  3146. palette%=
  3147. dim((J%+1)*4)
  3148.  ncol=255 
  3149. "ColourTrans_ReadPalette",-1,-1,palette%,256*4
  3150.  I%=0
  3151. 255:palette%!(I%<<2)=palette%!(I%<<2)>>>8:
  3152.  ncol=63 
  3153.  I%=0
  3154. +palette%!(I%<<2)=(I%
  3155. 16)>>1)*17
  3156. /palette%?(I%<<2 
  3157. 1)=(I%
  3158. &60)>>3)*17
  3159. ;palette%?(I%<<2 
  3160. 2)=(I%
  3161. 8)>>1 
  3162. 128)>>4)*17
  3163.  I%=0
  3164. ncol:
  3165. "OS_ReadPalette",I%,16 
  3166.  ,,i%:palette%!(I%<<2)=i%>>>8:
  3167. :k%=palette%+1:nk%=palette%+2
  3168.  I%=0
  3169. ncol*4
  3170.  palette%?I%<>k%?I% 
  3171.  palette%?I%<>nk%?I% t%=
  3172.  ncol>16 
  3173.  t% m$="D"
  3174.  ncol=15 
  3175.  t% m$="T"
  3176.  m$="R" 
  3177.  sx%*xmul%/xdiv%*sy%*ymul%/ydiv%<200000 k%=3 
  3178.  k%=4
  3179. nk%=8-k%
  3180. t%=1<<nk%
  3181. mask%=t%-1
  3182. td2%=1<<nk%-1
  3183. step%=1<<(8-k%)
  3184. %ncol%=ncol+1:
  3185.  ncol%=64 ncol%=256
  3186. ict%=
  3187. dim(2^(k%*3)*4-1)
  3188.  cache%<8192*6 scratch%=
  3189. dim(8192*6):scratchsz%=8192*6 
  3190.  scratch%=datacache%:scratchsz%=cache%
  3191.  info% 
  3192. "Begin table generation with ";scratchsz%" bytes."
  3193.  Z%=0
  3194. P%=code%
  3195. [OPT Z%
  3196. .make%
  3197. STMFD r13!,{r14}
  3198. LDR r4,ict
  3199. MOV r2,#step%/2
  3200. .blueloop
  3201. MOV r1,#step%/2
  3202. .greenloop
  3203. MOV r0,#step%/2
  3204. .redloop
  3205. MOV r3,r0,LSR #nk%
  3206. MOV r14,r1,LSR #nk%
  3207. MOV r5,r2,LSR #nk%
  3208. R r3,r3,r14,LSL #k%
  3209. R r3,r3,r5,LSL #k%*2
  3210. BL devious
  3211. ADD r0,r0,#step%*2
  3212. CMP r0,#256
  3213. BCC redloop
  3214. ADD r1,r1,#step%
  3215. CMP r1,#256
  3216. BCC greenloop
  3217. ADD r2,r2,#step%
  3218. CMP r2,#256
  3219. BCC blueloop
  3220. LDMFD r13!,{pc}^
  3221. .ct DCD palette%
  3222. .min DCD code%+8192-256*2*4
  3223. .ict DCD ict%
  3224. .fsaad DCD scratch%
  3225. #.fsalim DCD scratch%+scratchsz%
  3226. .devious
  3227. &STMFD r13!,{r0,r1,r2,r3,r4,r8,r14}
  3228. BIC r0,r0,#(mask%<<1)+1
  3229. BIC r1,r1,#mask%
  3230. BIC r2,r2,#mask%
  3231. MOV r5,#0
  3232. LDR r6,ct
  3233. MOV r9,#&ff0000
  3234. MOV r14,#&ff0000
  3235. LDR r12,min
  3236. .devloop
  3237. LDR r7,[r6,r5,LSL #2]
  3238. MOV r8,r7,lsr #16
  3239. BIC r10,r8,#mask%
  3240. ADD r11,r2,#t%
  3241. CMP r10,r2
  3242. BEQ blueequal
  3243. SUBCC r10,r2,r8
  3244. SUBCC r11,r11,r8
  3245. SUBCS r10,r8,r11
  3246. SUBCS r11,r8,r2
  3247. MUL r3,r10,r10
  3248. .doneblue
  3249. MUL r4,r11,r11
  3250. MOV r8,r7,lsr #8
  3251.  r8,r8,#255
  3252. BIC r10,r8,#mask%
  3253. ADD r11,r1,#t%
  3254. CMP r10,r1
  3255. BEQ greenequal
  3256. SUBCC r10,r1,r8
  3257. SUBCC r11,r11,r8
  3258. SUBCS r10,r8,r11
  3259. SUBCS r11,r8,r1
  3260. MUL r8,r10,r10
  3261. ADD r8,r8,r8,LSL #2
  3262. ADD r3,r3,r8,LSL #1
  3263. .donegreen
  3264. MUL r8,r11,r11
  3265. ADD r8,r8,r8,LSL #2
  3266. ADD r4,r4,r8,LSL #1
  3267.  r8,r7,#255
  3268. BIC r10,r8,#mask%
  3269. ADD r11,r0,#t%
  3270. CMP r10,r0
  3271. BEQ redequal0
  3272. SUBCC r10,r0,r8
  3273. SUBCC r11,r11,r8
  3274. SUBCS r10,r8,r11
  3275. SUBCS r11,r8,r0
  3276. MUL r7,r10,r10
  3277. ADD r7,r7,r7,LSL #1
  3278. ADD r7,r3,r7
  3279. STR r7,[r12,r5,LSL #2]
  3280. .donered0
  3281. MUL r7,r11,r11
  3282. ADD r7,r7,r7,LSL #1
  3283. ADD r7,r4,r7
  3284. CMP r7,r9
  3285. MOVCC r9,r7
  3286. ADD r7,r0,#t%
  3287. BIC r10,r8,#mask%
  3288. ADD r11,r7,#t%
  3289. CMP r10,r7
  3290. BEQ redequal1
  3291. SUBCC r10,r7,r8
  3292. SUBCC r11,r11,r8
  3293. SUBCS r10,r8,r11
  3294. SUBCS r11,r8,r7
  3295. MUL r7,r10,r10
  3296. ADD r7,r7,r7,LSL #1
  3297. ADD r3,r3,r7
  3298. .donered1
  3299. ADD r7,r5,#ncol%
  3300. STR r3,[r12,r7,LSL #2]
  3301. MUL r7,r11,r11
  3302. ADD r7,r7,r7,LSL #1
  3303. ADD r7,r4,r7
  3304. CMP r7,r14
  3305. MOVCC r14,r7
  3306. ADD r5,r5,#1
  3307. CMP r5,#ncol%
  3308. BCC devloop
  3309. LDMFD r13!,{r0,r1,r2,r3,r4}
  3310. LDR r5,fsaad
  3311. MOV r7,r5
  3312. MOV r10,#0
  3313. .calcnum0
  3314. LDMIA r12!,{r8,r11}
  3315. CMP r8,r9
  3316. STRLEB r10,[r7],#1
  3317. ADD r10,r10,#1
  3318. CMP r11,r9
  3319. STRLEB r10,[r7],#1
  3320. ADD r10,r10,#1
  3321. LDMIA r12!,{r8,r11}
  3322. CMP r8,r9
  3323. STRLEB r10,[r7],#1
  3324. ADD r10,r10,#1
  3325. CMP r11,r9
  3326. STRLEB r10,[r7],#1
  3327. ADD r10,r10,#1
  3328. CMP r10,#ncol%
  3329. BCC calcnum0
  3330. SUBS r10,r7,r5
  3331. SWIEQ 256+
  3332. CMP r10,#4 ;if<4 then
  3333. ]#MOVCC r7,r5 ;reset list pointer
  3334. ^"LDRCCB r5,[r7] ;first possible
  3335. _&LDRCCB r8,[r7,#1] ;second possible
  3336. RCC r5,r5,r8,lsl #8
  3337. a%LDRCCB r8,[r7,#2] ;third possible
  3338. RCC r5,r5,r8,lsl #16
  3339. ADD r5,r5,r10,lsl #24
  3340. BIC r10,r3,#1
  3341. STR r5,[r4,r10,LSL #2]
  3342. MOV r5,r7
  3343. MOV r10,#0
  3344. .calcnum1
  3345. LDMIA r12!,{r8,r11}
  3346. CMP r8,r14
  3347. STRLEB r10,[r7],#1
  3348. ADD r10,r10,#1
  3349. CMP r11,r14
  3350. STRLEB r10,[r7],#1
  3351. ADD r10,r10,#1
  3352. LDMIA r12!,{r8,r11}
  3353. CMP r8,r14
  3354. STRLEB r10,[r7],#1
  3355. ADD r10,r10,#1
  3356. CMP r11,r14
  3357. STRLEB r10,[r7],#1
  3358. ADD r10,r10,#1
  3359. CMP r10,#ncol%
  3360. BCC calcnum1
  3361. SUBS r10,r7,r5
  3362. SWIEQ 256+
  3363. CMP r10,#4 ;if<4 then
  3364. MOVCC r7,r5
  3365. LDRCCB r5,[r7]
  3366. LDRCCB r8,[r7,#1]
  3367. RCC r5,r5,r8,lsl #8
  3368. LDRCCB r8,[r7,#2]
  3369. RCC r5,r5,r8,lsl #16
  3370. ADD r5,r5,r10,lsl #24
  3371. R r10,r3,#1
  3372. STR r5,[r4,r10,LSL #2]
  3373. STR r7,fsaad
  3374. LDR r8,fsalim
  3375. CMP r7,r8
  3376. SWICS 256+
  3377. LDMFD r13!,{r8,pc}^
  3378. .redequal0
  3379. STR r3,[r12,r5,LSL #2]
  3380. TST r8,#td2%
  3381. SUBNE r11,r8,r0
  3382. SUBEQ r11,r11,r8
  3383. B donered0
  3384. .redequal1
  3385. TST r8,#td2%
  3386. SUBNE r11,r8,r7
  3387. SUBEQ r11,r11,r8
  3388. B donered1
  3389. .greenequal
  3390. TST r8,#td2%
  3391. SUBNE r11,r8,r1
  3392. SUBEQ r11,r11,r8
  3393. B donegreen
  3394. .blueequal
  3395. MOV r3,#0
  3396. TST r8,#td2%
  3397. SUBNE r11,r8,r2
  3398. SUBEQ r11,r11,r8
  3399. B doneblue
  3400.  make%
  3401.  info% 
  3402. "Generated 'r'";k%" tables for ";ncol%" colours using ";!fsaad-scratch%" bytes, taking "
  3403. -I%" cS"
  3404. %safesubict%=
  3405. dim(!fsaad-scratch%)
  3406.  I%=0
  3407. !fsaad-scratch%+4
  3408. 4:safesubict%!I%=scratch%!I%:
  3409.  I%=0
  3410. 2^(k%*3)*4-1
  3411. (ict%!I%>>>24)>3 ict%!I%=ict%!I%-scratch%+safesubict%
  3412.  fast% 
  3413.  -1,-9:col=0
  3414.  -3,-4,-5,-6,-7,-8,-10:col=2
  3415.  m$="D" 
  3416.  ncol=3 m$=""
  3417. 1col=0:
  3418.  ncol>15 
  3419. m$="C" 
  3420. m$="D" 
  3421. m$="R" col=2
  3422.  ncol=63 
  3423.  ncol=255 
  3424.  m$="D" col=0:ncol=256
  3425.  ncol=1 
  3426. "C":col=0:x%=x%+1
  3427. "D":col=0:x%=x%+3
  3428. "T":col=0:x%=x%+1
  3429.  cl%(x%+7,col)
  3430.  xl%(x%+7,col),xp%(sx%+7,col)
  3431.  xl2%(x%+7,col)
  3432.  sharpen% 
  3433.  order% 
  3434.  rm%(sx%+7,col),rm1%(sx%+7,col),rm2%(sx%+7,col)
  3435.  rm%(x%+7,col),rm1%(x%+7,col),rm2%(x%+7,col)
  3436.  hist%
  3437. equal% 
  3438.  vals%(256,col)
  3439.  nl%(x%+7,col)
  3440. totvals%=x%*(col+1)
  3441. totvals2%=sx%*(col+1)
  3442. 2:P%=code%
  3443.  ncol 
  3444.  2^24-1
  3445. [OPT Z
  3446. .div255
  3447.  I%=0
  3448. 2^p6bits-1
  3449. [OPT Z
  3450. EQUD I%/(2^p6bits-1)*F
  3451. [OPT Z
  3452. STMFD SP !,{R14}
  3453.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  3454. LDR R10,[R9,#4*8]
  3455. LDR R11,[R9,#3*8]
  3456. #LDR R12,[R9,#2*8]:LDR R12,[R12]
  3457. LDR R8,[R9,#8]:LDR R8,[R8]
  3458. LDR R9,[R9]:LDR R9,[R9]
  3459. LDR R4,[R10]
  3460. LDR R5,[R10,#4]
  3461. LDR R6,[R10,#8]
  3462. ADR R7,div255
  3463. .fsloop
  3464. ADD R10,R10,R8
  3465. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3466. WSUB R0,R4,R4,LSR #p6bits:ADD R0,R0,#1<<(bits-p6bits-1):MOV R0,R0,LSR #(bits-p6bits)
  3467. &LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
  3468. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3469. jSUB R3,R5,R5,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
  3470. R R0,R0,R3,LSL #8
  3471. &LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
  3472. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3473. kSUB R3,R6,R6,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
  3474. R R0,R0,R3,LSL #16
  3475. &LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
  3476. DSTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:MOV R0,R0,LSR #8
  3477. STRB R0,[R12,#2]
  3478.  m=-8 
  3479. [OPT Z
  3480. ADD R12,R12,R1,LSL #2
  3481. [OPT Z
  3482. (ADD R12,R12,R1,LSL #1:ADD R12,R12,R1
  3483.  dither% 
  3484. [OPT Z
  3485. ADD R0,R11,#4
  3486. ADD R2,R4,R4,LSL #1
  3487. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3488. STR R3,[R11,-R8]
  3489. ADD R2,R4,R4,LSL #2
  3490. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3491. STR R3,[R11]
  3492. MOV R3,R4,ASR #4
  3493. STR R3,[R11,R8]!
  3494. RSB R2,R4,R4,LSL #3
  3495. LDR R4,[R10]
  3496. ADD R4,R4,R2,ASR #4
  3497. ADD R2,R5,R5,LSL #1
  3498. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3499. STR R3,[R0,-R8]
  3500. MOV R3,R5,ASR #4
  3501. STR R3,[R0,R8]
  3502. ADD R2,R5,R5,LSL #2
  3503. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3504. STR R3,[R0],#4
  3505. RSB R2,R5,R5,LSL #3
  3506. LDR R5,[R10,#4]
  3507. ADD R5,R5,R2,ASR #4
  3508. ADD R2,R6,R6,LSL #1
  3509. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3510. STR R3,[R0,-R8]
  3511. ADD R2,R6,R6,LSL #2
  3512. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3513. STR R3,[R0]
  3514. MOV R3,R6,ASR #4
  3515. STR R3,[R0,R8]
  3516. RSB R2,R6,R6,LSL #3
  3517. LDR R6,[R10,#8]
  3518. ADD R6,R6,R2,ASR #4
  3519. [OPT Z
  3520. LDMIA R10,{R4,R5,R6}
  3521. [OPT Z
  3522. SUBS R9,R9,#1:BNE fsloop
  3523. LDMFD SP !,{PC}^
  3524.  2^15-1
  3525. [OPT Z
  3526. .div31
  3527.  I%=0
  3528. [OPT Z
  3529. EQUD I%/31*F
  3530. [OPT Z
  3531. STMFD SP !,{R14}
  3532.     1 LDR R1,[R9,#5*8]:LDR R1,[R1]
  3533. LDR R10,[R9,#4*8]
  3534. LDR R11,[R9,#3*8]
  3535.     4#LDR R12,[R9,#2*8]:LDR R12,[R12]
  3536. LDR R8,[R9,#8]:LDR R8,[R8]
  3537. LDR R9,[R9]:LDR R9,[R9]
  3538. LDR R4,[R10]
  3539. LDR R5,[R10,#4]
  3540. LDR R6,[R10,#8]
  3541. ADR R7,div31
  3542. .fsloop
  3543. ADD R10,R10,R8
  3544.     =%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3545.     >FSUB R0,R4,R4,LSR #5:ADD R0,R0,#1<<(bits-6):MOV R0,R0,LSR #(bits-5)
  3546.     ?&LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
  3547.     @%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3548.     AYSUB R3,R5,R5,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
  3549. R R0,R0,R3,LSL #5
  3550.     B&LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
  3551.     C%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3552.     DZSUB R3,R6,R6,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
  3553. R R0,R0,R3,LSL #10
  3554.     E&LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
  3555.     FISTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:ADD R12,R12,R1,LSL #1
  3556.  dither% 
  3557. [OPT Z
  3558. ADD R0,R11,#4
  3559. ADD R2,R4,R4,LSL #1
  3560.     L(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3561. STR R3,[R11,-R8]
  3562. ADD R2,R4,R4,LSL #2
  3563.     O$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3564. STR R3,[R11]
  3565. MOV R3,R4,ASR #4
  3566. STR R3,[R11,R8]!
  3567. RSB R2,R4,R4,LSL #3
  3568. LDR R4,[R10]
  3569. ADD R4,R4,R2,ASR #4
  3570. ADD R2,R5,R5,LSL #1
  3571.     W'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3572. STR R3,[R0,-R8]
  3573. MOV R3,R5,ASR #4
  3574. STR R3,[R0,R8]
  3575. ADD R2,R5,R5,LSL #2
  3576.     \#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3577. STR R3,[R0],#4
  3578. RSB R2,R5,R5,LSL #3
  3579. LDR R5,[R10,#4]
  3580. ADD R5,R5,R2,ASR #4
  3581. ADD R2,R6,R6,LSL #1
  3582.     b'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3583. STR R3,[R0,-R8]
  3584. ADD R2,R6,R6,LSL #2
  3585.     e#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3586. STR R3,[R0]
  3587. MOV R3,R6,ASR #4
  3588. STR R3,[R0,R8]
  3589. RSB R2,R6,R6,LSL #3
  3590. LDR R6,[R10,#8]
  3591. ADD R6,R6,R2,ASR #4
  3592. [OPT Z
  3593. LDMIA R10,{R4,R5,R6}
  3594. [OPT Z
  3595. SUBS R9,R9,#1:BNE fsloop
  3596. LDMFD SP !,{PC}^
  3597. [OPT Z
  3598. .div255
  3599.  I%=0
  3600. [OPT Z
  3601. EQUD I%/255*F
  3602. [OPT Z
  3603. STMFD SP !,{R14}
  3604. LDR R10,[R9,#4*8]
  3605. ADR R7,div255
  3606.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  3607. LDR R11,[R9,#3*8]
  3608. #LDR R12,[R9,#2*8]:LDR R12,[R12]
  3609. LDR R8,[R9,#8]:LDR R8,[R8]
  3610. LDR R9,[R9]:LDR R9,[R9]
  3611. LDR R4,[R10],R8
  3612. .fsloop
  3613. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3614. WSUB R0,R4,R4,LSR #8:ADD R0,R0,#1<<(bits-9):MOV R0,R0,LSR #(bits-8):STRB R0,[R12],R1
  3615. LDR R2,[R7,R0,LSL #2]
  3616.  dither% 
  3617. [OPT Z
  3618. SUB R4,R4,R2
  3619. MOVCS R4,#0
  3620. ADD R2,R4,R4,LSL #1
  3621. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3622. STR R3,[R11,-R8]
  3623. ADD R2,R4,R4,LSL #2
  3624. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3625. STR R3,[R11]
  3626. MOV R3,R4,ASR #4
  3627. STR R3,[R11,R8]!
  3628. RSB R2,R4,R4,LSL #3
  3629. LDR R4,[R10],R8
  3630. ADD R4,R4,R2,ASR #4
  3631. [OPT Z
  3632. LDR R4,[R10],R8
  3633. [OPT Z
  3634. SUBS R9,R9,#1:BNE fsloop
  3635. LDMFD SP !,{PC}^
  3636.  63,255
  3637. div15=P%:
  3638.  I%=0
  3639. 255*4
  3640. [OPT Z
  3641.  EQUD (palette%!I%
  3642. &FF)/255*F
  3643. #EQUD (palette%!I%>>8
  3644. &FF)/255*F
  3645. $EQUD (palette%!I%>>16
  3646. &FF)/255*F
  3647.  m$="R" 
  3648. [OPT Z
  3649. .ictloc EQUD ict%
  3650. [OPT Z
  3651. EQUD div15
  3652. STMFD SP !,{R14}
  3653.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  3654. LDR R10,[R9,#4*8]
  3655. LDR R11,[R9,#3*8]
  3656. #LDR R12,[R9,#2*8]:LDR R12,[R12]
  3657. LDR R8,[R9,#8]:LDR R8,[R8]
  3658. LDR R9,[R9]:LDR R9,[R9]
  3659. LDR R4,[R10]
  3660. LDR R5,[R10,#4]
  3661. LDR R6,[R10,#8]
  3662. LDR R7,fs%-4
  3663. .fsloop
  3664. ADD R10,R10,R8
  3665. [OPT Z
  3666. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3667. 3MOV R0,R4,LSR #(bits-4):CMP R0,#15:MOVCS R0,#15
  3668. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3669. FMOV R3,R5,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
  3670. R R0,R0,R3,LSL #4
  3671. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3672. FMOV R3,R6,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
  3673. R R0,R0,R3,LSL #8
  3674. LDR R3,colmatchloc
  3675. LDRB R0,[R3,R0]
  3676. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  3677. LDR R2,[R3],#4:SUB R4,R4,R2
  3678. .LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  3679. srchdevlist
  3680. [OPT Z
  3681. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3682. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3683. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3684. STMFD SP !,{R7,R8,R9}
  3685. MVN R2,#0
  3686. MOV R3,#&30<<23
  3687. .srch RSB R7,R3,#&20<<23
  3688. MOV R8,R6,LSR #bits-8
  3689. SUB R8,R8,R8,LSR #4
  3690. ADDS R7,R7,R8,LSL #23
  3691. MOVVSS R7,#&7F000000
  3692. MOVMI R7,#0
  3693.  R7,R7,#&60000000
  3694. ADD R7,R7,R3
  3695. ADD R14,R7,R7,LSR #4
  3696. ADD R7,R14,R14,LSR #8
  3697. ADD R7,R7,R7,LSR #16
  3698. SUBS R8,R6,R7,LSR #31-bits
  3699. RSBLT R8,R8,#0
  3700. MOV R8,R8,LSR #bits/2
  3701. MUL R9,R8,R8
  3702. RSB R7,R3,#&20<<23
  3703. MOV R8,R5,LSR #bits-8
  3704. SUB R8,R8,R8,LSR #4
  3705. ADDS R7,R7,R8,LSL #23
  3706. MOVVSS R7,#&7F000000
  3707. MOVMI R7,#0
  3708.  R7,R7,#&60000000
  3709. ADD R7,R3,R7
  3710. ADD R7,R7,R7,LSR #4
  3711. R R14,R14,R7,LSR #8
  3712. ADD R7,R7,R7,LSR #8
  3713. ADD R7,R7,R7,LSR #16
  3714. SUBS R8,R5,R7,LSR #31-bits
  3715. RSBLT R8,R8,#0
  3716. MOV R8,R8,LSR #bits/2
  3717. MUL R7,R8,R8
  3718. ADD R7,R7,R7,LSL #2
  3719. ADD R9,R9,R7,LSL #1
  3720. RSB R7,R3,#&20<<23
  3721. MOV R8,R4,LSR #bits-8
  3722. SUB R8,R8,R8,LSR #4
  3723. ADDS R7,R7,R8,LSL #23
  3724. MOVVSS R7,#&7F000000
  3725. MOVMI R7,#0
  3726.  R7,R7,#&60000000
  3727. ADD R7,R3,R7
  3728. ADD R7,R7,R7,LSR #4
  3729. R R14,R14,R7,LSR #16
  3730. ADD R7,R7,R7,LSR #8
  3731. ADD R7,R7,R7,LSR #16
  3732. SUBS R8,R4,R7,LSR #31-bits
  3733. RSBLT R8,R8,#0
  3734. MOV R8,R8,LSR #bits/2
  3735. MUL R7,R8,R8
  3736. ADD R7,R7,R7,LSL #1
  3737. ADD R9,R9,R7
  3738. CMP R9,R2
  3739. MOVLS R2,R9
  3740. MOVLS R0,R14
  3741. SUBS R3,R3,#&10<<23
  3742. BGE srch
  3743.  R7,R0,#&40000000
  3744. MOV R8,R7,LSR #23
  3745.  R7,R0,#&600000
  3746. R R8,R8,R7,LSR #16
  3747.  R7,R0,#&4000
  3748. R R8,R8,R7,LSR #10
  3749.  R7,R0,#&20000000
  3750. R R8,R8,R7,LSR #26
  3751.  R7,R0,#&3800
  3752. R R0,R8,R7,LSR #11
  3753. LDMFD SP !,{R7,R8,R9}
  3754. "+ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  3755. LDR R2,[R3],#4:SUB R4,R4,R2
  3756. $.LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  3757. [OPT Z
  3758. STRB R0,[R12],R1
  3759.  dither% 
  3760. [OPT Z
  3761. ADD R0,R11,#4
  3762. ADD R2,R4,R4,LSL #1
  3763. .(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3764. STR R3,[R11,-R8]
  3765. ADD R2,R4,R4,LSL #2
  3766. 1$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3767. STR R3,[R11]
  3768. MOV R3,R4,ASR #4
  3769. STR R3,[R11,R8]!
  3770. RSB R2,R4,R4,LSL #3
  3771. LDR R4,[R10]
  3772. ADD R4,R4,R2,ASR #4
  3773. ADD R2,R5,R5,LSL #1
  3774. 9'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3775. STR R3,[R0,-R8]
  3776. MOV R3,R5,ASR #4
  3777. STR R3,[R0,R8]
  3778. ADD R2,R5,R5,LSL #2
  3779. >#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3780. STR R3,[R0],#4
  3781. RSB R2,R5,R5,LSL #3
  3782. LDR R5,[R10,#4]
  3783. ADD R5,R5,R2,ASR #4
  3784. ADD R2,R6,R6,LSL #1
  3785. D'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3786. STR R3,[R0,-R8]
  3787. ADD R2,R6,R6,LSL #2
  3788. G#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3789. STR R3,[R0]
  3790. MOV R3,R6,ASR #4
  3791. STR R3,[R0,R8]
  3792. RSB R2,R6,R6,LSL #3
  3793. LDR R6,[R10,#8]
  3794. ADD R6,R6,R2,ASR #4
  3795. [OPT Z
  3796. LDMIA R10,{R4,R5,R6}
  3797. [OPT Z
  3798. SUBS R9,R9,#1:BNE fsloop
  3799. LDMFD SP !,{PC}^
  3800. divtable=P%:
  3801.  I%=0
  3802. [OPT Z
  3803. ^&EQUD (palette%!I%>>4
  3804. &F)/bright%*F
  3805. _'EQUD (palette%!I%>>12
  3806. &F)/bright%*F
  3807. `'EQUD (palette%!I%>>20
  3808. &F)/bright%*F
  3809. [OPT Z
  3810. .ictloc EQUD ict%
  3811.  I%=0
  3812. [OPT Z
  3813. EQUD I%/bright%*F
  3814.  I%=0
  3815. [OPT Z
  3816. EQUD I%/(bright%
  3817. [OPT Z
  3818. STMFD SP !,{R14}
  3819. v LDR R1,[R9,#5*8]:LDR R1,[R1]
  3820. LDR R10,[R9,#4*8]
  3821. LDR R11,[R9,#3*8]
  3822. y#LDR R12,[R9,#2*8]:LDR R12,[R12]
  3823. LDR R8,[R9,#8]:LDR R8,[R8]
  3824. LDR R9,[R9]:LDR R9,[R9]
  3825.  m$="D" 
  3826. m$="R" 
  3827. [OPT Z
  3828. LDR R4,[R10]
  3829. LDR R5,[R10,#4]
  3830. LDR R6,[R10,#8]
  3831. [OPT Z
  3832. LDR R4,[R10],R8
  3833.  m$<>"D" 
  3834. [OPT Z
  3835. ADR R7,divtable
  3836. [OPT Z
  3837. .fsloop
  3838. [OPT Z
  3839. ADD R10,R10,R8
  3840. srchdevlist
  3841. [OPT Z
  3842. MOV r3,r0
  3843. [OPT Z
  3844. ADD R10,R10,R8
  3845. MOV R3,#0
  3846. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3847. CMP R4,#F>>1
  3848.  SUBCS R4,R4,#F:
  3849. RCS R3,R3,#1
  3850. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3851. CMP R5,#F>>1
  3852.  SUBCS R5,R5,#F:
  3853. RCS R3,R3,#2
  3854. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3855. CMP R6,#F>>1
  3856.  SUBCS R6,R6,#F:
  3857. RCS R3,R3,#4
  3858. [OPT Z
  3859. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3860. ;RSB R3,R4,R4,LSL #4:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits
  3861. LDR R2,[R7,R3,LSL #2]
  3862. SUB R4,R4,R2
  3863. [OPT Z
  3864. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3865. ;RSB R3,R4,R4,LSL #3:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits
  3866. LDR R2,[R7,R3,LSL #2]
  3867. SUB R4,R4,R2
  3868. [OPT Z
  3869. MOV R2,R12,LSR #1
  3870. TST R12,#1
  3871. LDRB R0,[R2]
  3872. EQ R0,R0,#&F0:
  3873. REQ R0,R0,R3
  3874. NE R0,R0,#&0F:
  3875. RNE R0,R0,R3,LSL #4
  3876. STRB R0,[R2]
  3877. ADD R12,R12,R1
  3878.  m$="D" 
  3879. m$="R" 
  3880.  dither% 
  3881. [OPT Z
  3882. ADD R0,R11,#4
  3883. ADD R2,R4,R4,LSL #1
  3884. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3885. STR R3,[R11,-R8]
  3886. ADD R2,R4,R4,LSL #2
  3887. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3888. STR R3,[R11]
  3889. MOV R3,R4,ASR #4
  3890. STR R3,[R11,R8]!
  3891. RSB R2,R4,R4,LSL #3
  3892. LDR R4,[R10]
  3893. ADD R4,R4,R2,ASR #4
  3894. ADD R2,R5,R5,LSL #1
  3895. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3896. STR R3,[R0,-R8]
  3897. MOV R3,R5,ASR #4
  3898. STR R3,[R0,R8]
  3899. ADD R2,R5,R5,LSL #2
  3900. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3901. STR R3,[R0],#4
  3902. RSB R2,R5,R5,LSL #3
  3903. LDR R5,[R10,#4]
  3904. ADD R5,R5,R2,ASR #4
  3905. ADD R2,R6,R6,LSL #1
  3906. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3907. STR R3,[R0,-R8]
  3908. ADD R2,R6,R6,LSL #2
  3909. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3910. STR R3,[R0]
  3911. MOV R3,R6,ASR #4
  3912. STR R3,[R0,R8]
  3913. RSB R2,R6,R6,LSL #3
  3914. LDR R6,[R10,#8]
  3915. ADD R6,R6,R2,ASR #4
  3916. [OPT Z
  3917. LDMIA R10,{R4,R5,R6}
  3918.  dither% 
  3919. [OPT Z
  3920. ADD R2,R4,R4,LSL #1
  3921. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3922. STR R3,[R11,-R8]
  3923. ADD R2,R4,R4,LSL #2
  3924. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3925. STR R3,[R11]
  3926. MOV R3,R4,ASR #4
  3927. STR R3,[R11,R8]!
  3928. RSB R2,R4,R4,LSL #3
  3929. LDR R4,[R10],R8
  3930. ADD R4,R4,R2,ASR #4
  3931. [OPT Z
  3932. LDR R4,[R10],R8
  3933. [OPT Z
  3934. SUBS R9,R9,#1:BNE fsloop
  3935. LDMFD SP !,{PC}^
  3936. divtable=P%:
  3937.  I%=0
  3938. [OPT Z
  3939.     &EQUD (palette%!I%>>4
  3940. &F)/bright%*F
  3941. 'EQUD (palette%!I%>>12
  3942. &F)/bright%*F
  3943. 'EQUD (palette%!I%>>20
  3944. &F)/bright%*F
  3945. [OPT Z
  3946. EQUD 0
  3947. EQUD 1/(bright%
  3948. EQUD 2/(bright%
  3949. EQUD F
  3950. [OPT Z
  3951. STMFD SP !,{R14}
  3952.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  3953. LDR R10,[R9,#4*8]
  3954. LDR R11,[R9,#3*8]
  3955. LDR R12,[R9,#2*8]
  3956. LDR R12,[R12]
  3957. LDR R8,[R9,#8]
  3958. LDR R8,[R8]
  3959. LDR R9,[R9]
  3960. LDR R9,[R9]
  3961.  m$="C" 
  3962. m$="R" 
  3963. [OPT Z
  3964. LDR R4,[R10]
  3965. LDR R5,[R10,#4]
  3966. LDR R6,[R10,#8]
  3967. [OPT Z
  3968. LDR R4,[R10],R8
  3969. [OPT Z
  3970. .fsloop
  3971.  m$<>"C"
  3972. [OPT Z
  3973. ADR R7,divtable
  3974. [OPT Z
  3975. ADD R10,R10,R8
  3976. :%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3977. ;%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3978. <%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3979. MOV R3,#0
  3980. CMP R4,#F>>1:
  3981. RCS R3,R3,#1
  3982. CMP R5,#F>>1:
  3983. RCS R3,R3,#2
  3984. CMP R6,#F>>1:
  3985. RCS R3,R3,#4
  3986. A"CMP R3,#6:
  3987. Q R3,#1:BEQ octcyan
  3988. BCS octwhite
  3989. CMP R3,#4:BEQ octblue
  3990. MOVCS R3,#2:BCS octmagenta
  3991. CMP R3,#2:BEQ octgreen
  3992. BCS octyellow
  3993. CMP R3,#0:BEQ octblack
  3994. .octred
  3995. RSB R0,R4,#F
  3996. CMP R5,R0
  3997. BLT octred1
  3998. CMP R5,R6
  3999. MOVGE R3,#3
  4000. MOVLT R3,#2
  4001. B octconvert
  4002. .octred1
  4003. CMP R0,R6
  4004. MOVGE R3,#0
  4005. MOVLT R3,#2
  4006. B octconvert
  4007. .octgreen
  4008. RSB R0,R5,#F
  4009. CMP R0,R4
  4010. BLT octgreen1
  4011. CMP R0,R6
  4012. MOVGE R3,#0
  4013. MOVLT R3,#1
  4014. B octconvert
  4015. .octgreen1
  4016. CMP R4,R6
  4017. MOVGE R3,#3
  4018. MOVLT R3,#1
  4019. B octconvert
  4020. .octblue
  4021. RSB R0,R6,#F
  4022. CMP R0,R4
  4023. BLT octblue1
  4024. CMP R0,R5
  4025. MOVGE R3,#0
  4026. MOVLT R3,#1
  4027. B octconvert
  4028. .octblue1
  4029. CMP R4,R5
  4030. MOVGE R3,#2
  4031. MOVLT R3,#1
  4032. B octconvert
  4033. .octwhite
  4034. CMP R4,R5
  4035. BLT octwhite1
  4036. CMP R5,R6
  4037. MOVGE R3,#3
  4038. MOVLT R3,#2
  4039. B octconvert
  4040. .octwhite1
  4041. CMP R4,R6
  4042. MOVGE R3,#3
  4043. MOVLT R3,#1
  4044. .octconvert
  4045. CMP R3,#1
  4046. .octcyan
  4047. SUBEQ R5,R5,#F
  4048. SUBEQ R6,R6,#F
  4049. .octmagenta
  4050. CMP R3,#2
  4051. SUBEQ R4,R4,#F
  4052. SUBEQ R6,R6,#F
  4053. .octyellow
  4054. CMP R3,#3
  4055. SUBEQ R4,R4,#F
  4056. SUBEQ R5,R5,#F
  4057. .octblack
  4058. MOV R2,R12,LSR #2
  4059.  R7,R12,#3:MOV R7,R7,LSL #1
  4060. MOV R14,#3
  4061. ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
  4062. R R0,R0,R3,LSL R7:STRB R0,[R2]
  4063. ADD R12,R12,R1
  4064. [OPT Z
  4065. ADD R10,R10,R8
  4066. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4067. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  4068. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  4069. STMFD SP !,{R8,R9,R10}
  4070. MVN R2,#0
  4071. MOV R3,#3
  4072. .srch ADD R14,R3,R3,LSL #1
  4073. ADD R14,R7,R14,LSL #2
  4074. LDMIA R14,{R8,R9,R10}
  4075. SUBS R8,R4,R8
  4076. RSBMI R8,R8,#0
  4077. SUBS R9,R5,R9
  4078. RSBMI R9,R9,#0
  4079. SUBS R10,R6,R10
  4080. RSBMI R10,R10,#0
  4081. MOV R14,R8,LSR #bits/2
  4082. MUL R8,R14,R14
  4083. MOV R14,R9,LSR #bits/2
  4084. MUL R9,R14,R14
  4085. MOV R14,R10,LSR #bits/2
  4086. MUL R10,R14,R14
  4087. ADD R9,R9,R9,LSL #2
  4088. ADD R8,R8,R8,LSL #1
  4089. ADD R14,R8,R9,LSL #1
  4090. ADD R14,R14,R10
  4091. CMP R14,R2
  4092. MOVCC R2,R14
  4093. MOVCC R0,R3
  4094. SUBS R3,R3,#1
  4095. BPL srch
  4096. LDMFD SP !,{R8,R9,R10}
  4097. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  4098. LDR R2,[R3],#4:SUB R4,R4,R2
  4099. .LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  4100. MOV R3,R0
  4101. MOV R2,R12,LSR #2
  4102.  R7,R12,#3:MOV R7,R7,LSL #1
  4103. MOV R14,#3
  4104. ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
  4105. R R0,R0,R3,LSL R7:STRB R0,[R2]
  4106. ADD R12,R12,R1
  4107. [OPT Z
  4108. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4109. :RSB R3,R4,R4,LSL #2:ADD R3,R3,#F>>1:MOV R3,R3,LSR#bits
  4110. LDR R2,[R7,R3,LSL #2]
  4111. SUB R4,R4,R2
  4112. MOV R2,R12,LSR #2
  4113.  R5,R12,#3:MOV R5,R5,LSL #1
  4114. MOV R6,#3
  4115. DLDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
  4116. R R0,R0,R3,LSL R5:STRB R0,[R2]
  4117. ADD R12,R12,R1
  4118.  m$="C" 
  4119. m$="R" 
  4120.  dither% 
  4121. [OPT Z
  4122. ADD R0,R11,#4
  4123. ADD R2,R4,R4,LSL #1
  4124. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4125. STR R3,[R11,-R8]
  4126. ADD R2,R4,R4,LSL #2
  4127. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4128. STR R3,[R11]
  4129. MOV R3,R4,ASR #4
  4130. STR R3,[R11,R8]!
  4131. RSB R2,R4,R4,LSL #3
  4132. LDR R4,[R10]
  4133. ADD R4,R4,R2,ASR #4
  4134. ADD R2,R5,R5,LSL #1
  4135. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  4136. STR R3,[R0,-R8]
  4137. MOV R3,R5,ASR #4
  4138. STR R3,[R0,R8]
  4139. ADD R2,R5,R5,LSL #2
  4140. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  4141. STR R3,[R0],#4
  4142. RSB R2,R5,R5,LSL #3
  4143. LDR R5,[R10,#4]
  4144. ADD R5,R5,R2,ASR #4
  4145. ADD R2,R6,R6,LSL #1
  4146. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  4147. STR R3,[R0,-R8]
  4148. ADD R2,R6,R6,LSL #2
  4149. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  4150. STR R3,[R0]
  4151. MOV R3,R6,ASR #4
  4152. STR R3,[R0,R8]
  4153. RSB R2,R6,R6,LSL #3
  4154. LDR R6,[R10,#8]
  4155. ADD R6,R6,R2,ASR #4
  4156. [OPT Z
  4157. LDMIA R10,{R4,R5,R6}
  4158.  dither% 
  4159. [OPT Z
  4160. ADD R2,R4,R4,LSL #1
  4161. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4162. STR R3,[R11,-R8]
  4163. ADD R2,R4,R4,LSL #2
  4164. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4165. STR R3,[R11]
  4166. MOV R3,R4,ASR #4
  4167. STR R3,[R11,R8]!
  4168. RSB R2,R4,R4,LSL #3
  4169. LDR R4,[R10],R8
  4170. ADD R4,R4,R2,ASR #4
  4171. [OPT Z
  4172. LDR R4,[R10],R8
  4173. [OPT Z
  4174. SUBS R9,R9,#1:BNE fsloop
  4175. LDMFD SP !,{PC}^
  4176. [OPT Z
  4177. .divtable EQUD 0
  4178. EQUD (1-black%/256*2)/16*F
  4179. EQUD (2-black%/256*4)/16*F
  4180. EQUD (3-black%/256*5)/16*F
  4181. EQUD (4-black%/256*6)/16*F
  4182. EQUD (5-black%/256*7)/16*F
  4183. EQUD (6-black%/256*8)/16*F
  4184. EQUD (7-black%/256*8)/16*F
  4185. EQUD (8-black%/256*8)/16*F
  4186. EQUD (9-black%/256*8)/16*F
  4187. EQUD (10-black%/256*8)/16*F
  4188. EQUD (11-black%/256*7)/16*F
  4189. EQUD (12-black%/256*6)/16*F
  4190. EQUD (13-black%/256*5)/16*F
  4191. EQUD (14-black%/256*4)/16*F
  4192. EQUD (15-black%/256*2)/16*F
  4193. EQUD F
  4194. .evenrow_gard DCD even_gard
  4195. .oddrow_gard DCD odd_gard
  4196. .rowinc DCD 0
  4197. STMFD SP !,{R14}
  4198. % LDR R1,[R9,#5*8]:LDR R1,[R1]
  4199. LDR R10,[R9,#4*8]
  4200. LDR R11,[R9,#3*8]
  4201. LDR R12,[R9,#2*8]
  4202. LDR R12,[R12]
  4203. LDR R8,[R9,#8]
  4204. LDR R8,[R8]
  4205. LDR R9,[R9]
  4206. LDR R9,[R9]
  4207. LDR R4,[R10],R8
  4208. TEQ R8,#0
  4209. LDRPL R6,evenrow_gard
  4210. LDRMI R6,oddrow_gard
  4211. MOV R1,R1,LSL #1
  4212. LDR R7,rowinc
  4213. ADR R14,divtable
  4214. .fsloop
  4215. 6%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4216. ADD R5,R4,#F>>5
  4217. MOVS R5,R5,LSR #bits-4
  4218. LDRNE R0,[R14,R5,LSL #2]
  4219. SUBNE R4,R4,R0
  4220.  dither% 
  4221. [OPT Z
  4222. ADD R2,R4,R4,LSL #1
  4223. ?(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4224. STR R3,[R11,-R8]
  4225. ADD R2,R4,R4,LSL #2
  4226. B$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4227. STR R3,[R11]
  4228. MOV R3,R4,ASR #4
  4229. STR R3,[R11,R8]!
  4230. RSB R2,R4,R4,LSL #3
  4231. LDR R4,[R10],R8
  4232. ADDS R4,R4,R2,ASR #4
  4233. [OPT Z
  4234. LDR R4,[R10],R8
  4235. [OPT Z
  4236. P%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4237. ADD R3,R4,#F>>5
  4238. MOVS R3,R3,LSR #bits-4
  4239. LDRNE R0,[R14,R3,LSL #2]
  4240. SUBNE R4,R4,R0
  4241. R R5,R5,R3,LSL #5:LDR R3,[R6,R5,LSL #2]
  4242. VFMOV R2,R12,LSR #1:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2],R7
  4243. WBMOV R3,R3,LSR #8:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2]
  4244. ADD R12,R12,R1
  4245.  dither% 
  4246. [OPT Z
  4247. ADD R2,R4,R4,LSL #1
  4248. ](LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4249. STR R3,[R11,-R8]
  4250. ADD R2,R4,R4,LSL #2
  4251. `$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4252. STR R3,[R11]
  4253. MOV R3,R4,ASR #4
  4254. STR R3,[R11,R8]!
  4255. RSB R2,R4,R4,LSL #3
  4256. LDR R4,[R10],R8
  4257. ADD R4,R4,R2,ASR #4
  4258. [OPT Z
  4259. LDR R4,[R10],R8
  4260. [OPT Z
  4261. SUBS R9,R9,#2:BNE fsloop
  4262. LDMFD SP !,{PC}^
  4263. [OPT Z
  4264. .divtable EQUD 0
  4265. EQUD (1-black%/256*2)/9*F
  4266. EQUD (2-black%/256*4)/9*F
  4267. EQUD (3-black%/256*5)/9*F
  4268. EQUD (4-black%/256*6)/9*F
  4269. EQUD (5-black%/256*6)/9*F
  4270. EQUD (6-black%/256*5)/9*F
  4271. EQUD (7-black%/256*4)/9*F
  4272. EQUD (8-black%/256*2)/9*F
  4273. EQUD F
  4274. .evenrow_gard DCD even_gard
  4275. .oddrow_gard DCD odd_gard
  4276. .rowinc DCD 0
  4277. STMFD SP !,{R14}
  4278.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  4279. LDR R10,[R9,#4*8]
  4280. LDR R11,[R9,#3*8]
  4281. LDR R12,[R9,#2*8]
  4282. LDR R12,[R12]
  4283. LDR R8,[R9,#8]
  4284. LDR R8,[R8]
  4285. LDR R9,[R9]
  4286. LDR R9,[R9]
  4287. LDR R4,[R10],R8
  4288. TEQ R8,#0
  4289. LDRPL R6,evenrow_gard
  4290. LDRMI R6,oddrow_gard
  4291. MOV R1,R1,LSL #1
  4292. LDR R7,rowinc
  4293. ADR R14,divtable
  4294. .fsloop
  4295. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4296. ADD R5,R4,#F>>4
  4297. ADD R5,R5,R5,LSL #3
  4298. MOVS R5,R5,LSR #bits
  4299. LDRNE R0,[R14,R5,LSL #2]
  4300. SUBNE R4,R4,R0
  4301.  dither% 
  4302. [OPT Z
  4303. ADD R2,R4,R4,LSL #1
  4304. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4305. STR R3,[R11,-R8]
  4306. ADD R2,R4,R4,LSL #2
  4307. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4308. STR R3,[R11]
  4309. MOV R3,R4,ASR #4
  4310. STR R3,[R11,R8]!
  4311. RSB R2,R4,R4,LSL #3
  4312. LDR R4,[R10],R8
  4313. ADDS R4,R4,R2,ASR #4
  4314. [OPT Z
  4315. LDR R4,[R10],R8
  4316. [OPT Z
  4317. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4318. ADD R3,R4,#F>>4
  4319. ADD R3,R3,R3,LSL #3
  4320. MOVS R3,R3,LSR #bits
  4321. LDRNE R0,[R14,R3,LSL #2]
  4322. SUBNE R4,R4,R0
  4323. R R5,R5,R3,LSL #4:LDR R5,[R6,R5,LSL #2]
  4324. MOV R2,R12,LSR #1
  4325.  R3,R5,#&3F
  4326. STRB R3,[R2],R7
  4327. !MOV R3,R5,LSR #6:
  4328.  R3,R3,#&3F
  4329. STRB R3,[R2],R7
  4330. "MOV R3,R5,LSR #12:STRB R3,[R2]
  4331. ADD R12,R12,R1
  4332.  dither% 
  4333. [OPT Z
  4334. ADD R2,R4,R4,LSL #1
  4335. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4336. STR R3,[R11,-R8]
  4337. ADD R2,R4,R4,LSL #2
  4338. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4339. STR R3,[R11]
  4340. MOV R3,R4,ASR #4
  4341. STR R3,[R11,R8]!
  4342. RSB R2,R4,R4,LSL #3
  4343. LDR R4,[R10],R8
  4344. ADD R4,R4,R2,ASR #4
  4345. [OPT Z
  4346. LDR R4,[R10],R8
  4347. [OPT Z
  4348. SUBS R9,R9,#2:BNE fsloop
  4349. LDMFD SP !,{PC}^
  4350. [OPT Z
  4351. .divtable EQUD 0
  4352. EQUD (1-black%/256*2)/4*F
  4353. EQUD (2-black%/256*4)/4*F
  4354. EQUD (3-black%/256*2)/4*F
  4355. EQUD F
  4356. .evenrow_gard DCD even_gard
  4357. .oddrow_gard DCD odd_gard
  4358. .rowinc DCD 0
  4359. STMFD SP !,{R14}
  4360.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  4361. LDR R10,[R9,#4*8]
  4362. LDR R11,[R9,#3*8]
  4363. LDR R12,[R9,#2*8]
  4364. LDR R12,[R12]
  4365. LDR R8,[R9,#8]
  4366. LDR R8,[R8]
  4367. LDR R9,[R9]
  4368. LDR R9,[R9]
  4369. LDR R4,[R10],R8
  4370. TEQ R8,#0
  4371. LDRPL R6,evenrow_gard
  4372. LDRMI R6,oddrow_gard
  4373. MOV R1,R1,LSL #1
  4374. LDR R7,rowinc
  4375. ADR R14,divtable
  4376. .fsloop
  4377. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4378. ADD R5,R4,#F>>3
  4379. MOVS R5,R5,LSR #bits-2
  4380. LDRNE R0,[R14,R5,LSL #2]
  4381. SUBNE R4,R4,R0
  4382.  dither% 
  4383. [OPT Z
  4384. ADD R2,R4,R4,LSL #1
  4385. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4386. STR R3,[R11,-R8]
  4387. ADD R2,R4,R4,LSL #2
  4388. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4389. STR R3,[R11]
  4390. MOV R3,R4,ASR #4
  4391. STR R3,[R11,R8]!
  4392. RSB R2,R4,R4,LSL #3
  4393. LDR R4,[R10],R8
  4394. ADDS R4,R4,R2,ASR #4
  4395. [OPT Z
  4396. LDR R4,[R10],R8
  4397. [OPT Z
  4398. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4399. ADD R3,R4,#F>>3
  4400. MOVS R3,R3,LSR #bits-2
  4401. LDRNE R0,[R14,R3,LSL #2]
  4402. SUBNE R4,R4,R0
  4403. R R5,R5,R3,LSL #3:LDRB R5,[R6,R5]
  4404. MOV R2,R12,LSR #2
  4405. TST R12,#2
  4406.  R3,R5,#&F:LDRB R0,[R2]
  4407. EQ R0,R0,#&F0:
  4408. REQ R0,R0,R3
  4409. NE R0,R0,#&0F:
  4410. RNE R0,R0,R3,LSL #4
  4411. STRB R0,[R2],R7
  4412. !MOV R3,R5,LSR #4:LDRB R0,[R2]
  4413. EQ R0,R0,#&F0:
  4414. REQ R0,R0,R3
  4415. NE R0,R0,#&0F:
  4416. RNE R0,R0,R3,LSL #4
  4417. STRB R0,[R2]
  4418. ADD R12,R12,R1
  4419.  dither% 
  4420. [OPT Z
  4421. ADD R2,R4,R4,LSL #1
  4422.  (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4423. STR R3,[R11,-R8]
  4424. ADD R2,R4,R4,LSL #2
  4425. #$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4426. STR R3,[R11]
  4427. MOV R3,R4,ASR #4
  4428. STR R3,[R11,R8]!
  4429. RSB R2,R4,R4,LSL #3
  4430. LDR R4,[R10],R8
  4431. ADD R4,R4,R2,ASR #4
  4432. [OPT Z
  4433. LDR R4,[R10],R8
  4434. [OPT Z
  4435. SUBS R9,R9,#2:BNE fsloop
  4436. LDMFD SP !,{PC}^
  4437. [OPT Z
  4438. STMFD SP !,{R14}
  4439. 8 LDR R1,[R9,#5*8]:LDR R1,[R1]
  4440. LDR R10,[R9,#4*8]
  4441. LDR R11,[R9,#3*8]
  4442. LDR R12,[R9,#2*8]
  4443. LDR R12,[R12]
  4444. LDR R8,[R9,#8]
  4445. LDR R8,[R8]
  4446. LDR R9,[R9]
  4447. LDR R9,[R9]
  4448. LDR R4,[R10],R8
  4449. MOV R7,#1
  4450. .fsloop
  4451. D%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4452.  black% 
  4453. [OPT Z
  4454. MOV R2,R12,LSR #3
  4455.  R5,R12,#7:MOV R6,#1
  4456. LDRB R0,[R2,#-(x%+7>>3)]
  4457. SUB R3,R4,#F
  4458. CMP R7,#0
  4459. M!ADDNE R4,R4,#black%<<(bits-8)
  4460. N!ADDEQ R3,R3,#black%<<(bits-8)
  4461. TST R0,R6,LSL R5
  4462. P!ADDNE R4,R4,#black%<<(bits-8)
  4463. Q!ADDEQ R3,R3,#black%<<(bits-8)
  4464. MOVS R0,R3:RSBMI R0,R3,#0
  4465. CMP R4,R0
  4466. MOVCC R3,#0
  4467. MOVCS R4,R3:MOVCS R3,#1
  4468. MOV R7,R3
  4469. [OPT Z
  4470. Z'ADD R3,R4,#F>>1:MOV R3,R3,LSR #bits
  4471. SUB R4,R4,R3,LSL #bits
  4472. MOV R2,R12,LSR #3
  4473.  R5,R12,#7:MOV R6,#1
  4474. [OPT Z
  4475. a7LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
  4476. R R0,R0,R3,LSL R5
  4477. STRB R0,[R2]
  4478. ADD R12,R12,R1
  4479.  dither% 
  4480. [OPT Z
  4481. ADD R2,R4,R4,LSL #1
  4482. h(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4483. STR R3,[R11,-R8]
  4484. ADD R2,R4,R4,LSL #2
  4485. k$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4486. STR R3,[R11]
  4487. MOV R3,R4,ASR #4
  4488. STR R3,[R11,R8]!
  4489. RSB R2,R4,R4,LSL #3
  4490. LDR R4,[R10],R8
  4491. ADD R4,R4,R2,ASR #4
  4492. [OPT Z
  4493. LDR R4,[R10],R8
  4494. [OPT Z
  4495. SUBS R9,R9,#1:BNE fsloop
  4496. LDMFD SP !,{PC}^
  4497. [OPT Z
  4498. .sxloc DCD sx%
  4499.  col 
  4500.  input<=8 
  4501. [OPT Z
  4502. .mappix%
  4503. LDR R0,sxloc
  4504. LDR R1,[R9]:LDR R1,[R1]
  4505. LDR R2,[R9,#3*8]
  4506. LDR R5,[R9,#4*8]
  4507. MOV R8,#0
  4508. .mappixlp
  4509. LDRB R6,[R1],#step24
  4510.  input 
  4511.  ham 
  4512. [OPT Z
  4513. ADR R9,ltable
  4514. !MOVS R7,R6,LSR #4:
  4515.  R6,R6,#15
  4516. 2LDREQ R10,[R2,R6,LSL #2]:
  4517. Q R11,R10:
  4518. Q R12,R10
  4519. &CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
  4520. &CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
  4521. &CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
  4522. ADD R3,R10,R11
  4523. ADD R3,R3,R12
  4524. MOV R3,R3,LSR #2
  4525. STMIA R5!,{R3}
  4526. SUBS R0,R0,#1:BNE mappixlp
  4527. MOVS PC,R14
  4528. .ltable
  4529.  I%=0
  4530. [OPT Z
  4531. EQUD I%/15*F
  4532.  hpredict%=2 
  4533. [OPT Z
  4534. ADD R6,R6,R8
  4535.  R6,R6,#255
  4536. MOV R8,R6
  4537. [OPT Z
  4538. (LDR R7,[R2,R6,LSL #2]:STR R7,[R5],#4
  4539. SUBS R0,R0,#1:BNE mappixlp
  4540. MOVS PC,R14
  4541.  bigendianbits 
  4542. [OPT Z
  4543. MOV R10,R6,LSR #4
  4544. LDR R7,[R2,R10,LSL #2]
  4545.  R10,R6,#&F
  4546. [OPT Z
  4547.  R10,R6,#&F
  4548. LDR R7,[R2,R10,LSL #2]
  4549. MOV R10,R6,LSR #4
  4550. [OPT Z
  4551. ,LDR R8,[R2,R10,LSL #2]:STMIA R5!,{R7,R8}
  4552. SUBS R0,R0,#2:BHI mappixlp
  4553. MOVS PC,R14
  4554.  bigendianbits 
  4555. [OPT Z
  4556. MOV R10,R6,LSR #6
  4557. LDR R7,[R2,R10,LSL #2]
  4558.  R10,R6,#&30
  4559. LDR R8,[R2,R10,LSR #2]
  4560.  R10,R6,#&C
  4561. LDR R9,[R2,R10]
  4562.  R10,R6,#&3
  4563. [OPT Z
  4564.  R10,R6,#&3
  4565. LDR R7,[R2,R10,LSL #2]
  4566.  R10,R6,#&C
  4567. LDR R8,[R2,R10]
  4568.  R10,R6,#&30
  4569. LDR R9,[R2,R10,LSR #2]
  4570. MOV R10,R6,LSR #6
  4571. [OPT Z
  4572. 4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
  4573. SUBS R0,R0,#4:BHI mappixlp
  4574. MOVS PC,R14
  4575.  bigendianbits 
  4576. [OPT Z
  4577.  R10,R6,#&80
  4578. LDR R7,[R2,R10,LSR #5]
  4579.  R10,R6,#&40
  4580. LDR R8,[R2,R10,LSR #4]
  4581.  R10,R6,#&20
  4582. LDR R9,[R2,R10,LSR #3]
  4583.  R10,R6,#&10
  4584. 4LDR R10,[R2,R10,LSR #2]:STMIA R5!,{R7,R8,R9,R10}
  4585.  R10,R6,#&8
  4586. LDR R7,[R2,R10,LSR #1]
  4587.  R10,R6,#&4
  4588. LDR R8,[R2,R10]
  4589.  R10,R6,#&2
  4590. LDR R9,[R2,R10,LSL #1]
  4591.  R10,R6,#&1
  4592. [OPT Z
  4593.  R10,R6,#&1
  4594. LDR R7,[R2,R10,LSL #2]
  4595.  R10,R6,#&2
  4596. LDR R8,[R2,R10,LSL #1]
  4597.  R10,R6,#&4
  4598. LDR R9,[R2,R10]
  4599.  R10,R6,#&8
  4600. 4LDR R10,[R2,R10,LSR #1]:STMIA R5!,{R7,R8,R9,R10}
  4601.  R10,R6,#&10
  4602. LDR R7,[R2,R10,LSR #2]
  4603.  R10,R6,#&20
  4604. LDR R8,[R2,R10,LSR #3]
  4605.  R10,R6,#&40
  4606. LDR R9,[R2,R10,LSR #4]
  4607. MOV R10,R6,LSR #7
  4608. [OPT Z
  4609.     4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
  4610. SUBS R0,R0,#8:BHI mappixlp
  4611. MOVS PC,R14
  4612. [OPT Z
  4613. .mappix%
  4614. LDR R0,sxloc
  4615. LDR R1,[R9]:LDR R1,[R1]
  4616. LDR R2,[R9,#8]:LDR R2,[R2]
  4617. LDR R3,[R9,#4*8]
  4618. LDR R4,[R9,#3*8]
  4619. LDR R5,[R9,#2*8]
  4620. LDR R6,[R9,#5*8]
  4621. LDR R7,[R9,#6*8]
  4622. LDR R8,[R9,#7*8]
  4623. CMP R1,R2
  4624. ADDEQ R2,R2,#1
  4625. .mappixlp
  4626. .LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
  4627. >LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
  4628. R R9,R9,R10
  4629.  R10,R9,#255:LDR R10,[R3,R10,LSL #2]
  4630. <MOV R11,R9,LSR #8:
  4631.  R11,R11,#255:LDR R11,[R4,R11,LSL #2]
  4632.  .MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
  4633. !3ADD R10,R10,R11:ADD R10,R10,R12:STMIA R8!,{R10}
  4634. SUBS R0,R0,#1:BNE mappixlp
  4635. MOVS PC,R14
  4636. [OPT Z
  4637. .mappix%
  4638. LDR R0,sxloc
  4639. ) LDR R1,[R9,#2*8]:LDR R1,[R1]
  4640. LDR R2,[R9,#8]:LDR R2,[R2]
  4641. LDR R3,[R9]:LDR R3,[R3]
  4642. LDR R4,[R9,#5*8]
  4643. LDR R5,[R9,#4*8]
  4644. LDR R6,[R9,#3*8]
  4645. LDR R7,[R9,#6*8]
  4646. STMFD SP !,{R14}
  4647. 1$MOV r11,#0:MOV R12,#0:MOV R14,#0
  4648. .mappixlp
  4649. 3CLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
  4650.  hpredict%=2 
  4651. [OPT Z
  4652. ADD r8,r8,r11
  4653.  r8,r8,#255
  4654. MOV r11,r8
  4655. ADD r9,r9,r12
  4656.  r9,r9,#255
  4657. MOV r12,r9
  4658. ADD r10,r10,r14
  4659.  r10,r10,#255
  4660. MOV r14,r10
  4661. [OPT Z
  4662. CGLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4663. D-ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
  4664. SUBS R0,R0,#1:BNE mappixlp
  4665. LDMFD SP !,{PC}^
  4666. [OPT Z
  4667. .mappix%
  4668. LDR R0,sxloc
  4669. L LDR R1,[R9,#2*8]:LDR R1,[R1]
  4670. LDR R2,[R9,#8]:LDR R2,[R2]
  4671. LDR R3,[R9]:LDR R3,[R3]
  4672. LDR R4,[R9,#5*8]
  4673. LDR R5,[R9,#4*8]
  4674. LDR R6,[R9,#3*8]
  4675. LDR R7,[R9,#6*8]
  4676. STMFD SP !,{R14}
  4677. T?MOV r11,#colourindex 
  4678.  255:ADD r11,r11,#colourindex 
  4679.  &ff00
  4680. .mappixlp
  4681. V@LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
  4682.  r8,r8,r11:
  4683.  r9,r9,r11:
  4684.  r10,r10,r11
  4685. XGLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4686. Y-ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
  4687. SUBS R0,R0,#1:BNE mappixlp
  4688. LDMFD SP !,{PC}^
  4689. [OPT Z
  4690. .mappix%
  4691. LDR R0,sxloc
  4692. LDR R1,[R9]:LDR R1,[R1]
  4693. LDR R4,[R9,#1*8]
  4694. LDR R7,[R9,#8*8]
  4695. .mappixlp
  4696. LDRB R8,[R1],#2
  4697. f>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4698. SUBS R0,R0,#1:BNE mappixlp
  4699. MOVS PC,R14
  4700. [OPT Z
  4701. .mappix%
  4702. LDR R0,sxloc
  4703. LDR R1,[R9]:LDR R1,[R1]
  4704. ADD R1,R1,#1
  4705. LDR R4,[R9,#1*8]
  4706. LDR R7,[R9,#8*8]
  4707. .mappixlp
  4708. LDRB R8,[R1],#2
  4709. t>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4710. SUBS R0,R0,#1:BNE mappixlp
  4711. MOVS PC,R14
  4712. [OPT Z
  4713. .mappix%
  4714. LDR R0,sxloc
  4715. LDR R1,[R9]:LDR R1,[R1]
  4716. ADD R1,R1,#1
  4717. LDR R4,[R9,#1*8]
  4718. LDR R7,[R9,#8*8]
  4719. .mappixlp
  4720. LDRB R8,[R1],#2
  4721.  R8,R8,#ymax%
  4722. >LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4723. SUBS R0,R0,#1:BNE mappixlp
  4724. MOVS PC,R14
  4725.  xmul%=2 
  4726.  xdiv%=1 
  4727. [OPT Z
  4728. .xsample%
  4729. LDR R0,[R9]:LDR R0,[R0]
  4730. LDR R1,[R9,#8]
  4731. LDR R2,[R9,#2*8]
  4732. SUBS R0,R0,#2
  4733. BEQ xdonediv
  4734. BMI xdonediv
  4735. .xsamplelp
  4736. LDMIA R1,{R5,R6}
  4737. ADD R6,R6,R5
  4738. MOV R6,R6,LSR #1
  4739. STMIA R2!,{R5,R6}
  4740. ADD R1,R1,#4
  4741. SUBS R0,R0,#2:BGT xsamplelp
  4742. .xdonediv
  4743. LDMIA R1,{R5}
  4744. MOV R6,R5
  4745. STMIA R2!,{R5,R6}
  4746. MOVS PC,R14
  4747. [OPT Z
  4748. .xsample%
  4749. LDR R0,[R9]:LDR R0,[R0]
  4750. LDR R1,[R9,#8]
  4751. LDR R2,[R9,#2*8]
  4752.  LDR R3,[R9,#3*8]:LDR R3,[R3]
  4753.  LDR R4,[R9,#4*8]:LDR R4,[R4]
  4754. MOV R11,R4
  4755. .xsamplelp
  4756. LDMIA R1,{R5}
  4757. ,SUBS R11,R11,#1:
  4758. Q R11,R4:ADDEQ R1,R1,#4
  4759. SUBS R12,R3,#1
  4760. BEQ xdonediv
  4761. .xdivlp
  4762. CMP R12,R11
  4763. BCC xdivlp2
  4764. #LDMIA R1!,{R8}:MLA R5,R8,R11,R5
  4765. SUBS R12,R12,R11:MOV R11,R4
  4766. BNE xdivlp
  4767. B xdonediv
  4768. .xdivlp2
  4769. LDMIA R1,{R8}
  4770. ,SUBS R11,R11,#1:
  4771. Q R11,R4:ADDEQ R1,R1,#4
  4772. ADD R5,R5,R8
  4773. SUBS R12,R12,#1:BNE xdivlp
  4774. .xdonediv
  4775. STMIA R2!,{R5}
  4776. SUBS R0,R0,#1:BPL xsamplelp
  4777. MOVS PC,R14
  4778.  input<=8 
  4779. [OPT Z
  4780. .mappix%
  4781. LDR R0,sxloc
  4782. LDR R1,[R9]:LDR R1,[R1]
  4783. LDR R2,[R9,#3*8]
  4784. LDR R3,[R9,#2*8]
  4785. LDR R4,[R9,#8]
  4786. LDR R5,[R9,#4*8]
  4787. MOV R10,#0
  4788. .mappixlp
  4789. LDRB R6,[R1],#step24
  4790.  input 
  4791.  ham 
  4792. [OPT Z
  4793. ADR R9,ltable
  4794. !MOVS R7,R6,LSR #4:
  4795.  R6,R6,#15
  4796. NLDREQ R10,[R2,R6,LSL #2]:LDREQ R11,[R3,R6,LSL #2]:LDREQ R12,[R4,R6,LSL #2]
  4797. &CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
  4798. &CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
  4799. &CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
  4800. STMIA R5!,{R10,R11,R12}
  4801. SUBS R0,R0,#1:BNE mappixlp
  4802. MOVS PC,R14
  4803. .ltable
  4804.  I%=0
  4805. [OPT Z
  4806. EQUD I%/15*F
  4807.  hpredict%=2 
  4808. [OPT Z
  4809. ADD R6,R6,R10
  4810.  R6,R6,#255
  4811. MOV R10,R6
  4812. [OPT Z
  4813. ELDR R7,[R2,R6,LSL #2]:LDR R8,[R3,R6,LSL #2]:LDR R9,[R4,R6,LSL #2]
  4814. STMIA R5!,{R7,R8,R9}
  4815. SUBS R0,R0,#1:BNE mappixlp
  4816. MOVS PC,R14
  4817.  bigendianbits 
  4818. [OPT Z
  4819. MOV R10,R6,LSR #4
  4820. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4821. STMIA R5!,{R7,R8,R9}
  4822.  R10,R6,#&F
  4823. [OPT Z
  4824.  R10,R6,#&F
  4825. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4826. STMIA R5!,{R7,R8,R9}
  4827. MOV R10,R6,LSR #4
  4828. [OPT Z
  4829. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4830. STMIA R5!,{R7,R8,R9}
  4831. SUBS R0,R0,#2:BHI mappixlp
  4832. MOVS PC,R14
  4833.  bigendianbits 
  4834. [OPT Z
  4835. MOV R10,R6,LSR #6
  4836. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4837. STMIA R5!,{R7,R8,R9}
  4838.  R10,R6,#&30
  4839. HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4840. STMIA R5!,{R7,R8,R9}
  4841.  R10,R6,#&C
  4842. 3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4843. STMIA R5!,{R7,R8,R9}
  4844.  R10,R6,#&3
  4845. [OPT Z
  4846.  R10,R6,#&3
  4847. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4848. STMIA R5!,{R7,R8,R9}
  4849.  R10,R6,#&C
  4850. 3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4851. STMIA R5!,{R7,R8,R9}
  4852.  R10,R6,#&30
  4853. HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4854. STMIA R5!,{R7,R8,R9}
  4855. MOV R10,R6,LSR #6
  4856. [OPT Z
  4857. #HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4858. STMIA R5!,{R7,R8,R9}
  4859. SUBS R0,R0,#4:BHI mappixlp
  4860. MOVS PC,R14
  4861.  bigendianbits 
  4862. [OPT Z
  4863.  R10,R6,#&80
  4864. ,HLDR R7,[R2,R10,LSR #5]:LDR R8,[R3,R10,LSR #5]:LDR R9,[R4,R10,LSR #5]
  4865. STMIA R5!,{R7,R8,R9}
  4866.  R10,R6,#&40
  4867. /HLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
  4868. STMIA R5!,{R7,R8,R9}
  4869.  R10,R6,#&20
  4870. 2HLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
  4871. STMIA R5!,{R7,R8,R9}
  4872.  R10,R6,#&10
  4873. 5HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4874. STMIA R5!,{R7,R8,R9}
  4875.  R10,R6,#&8
  4876. 8HLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
  4877. STMIA R5!,{R7,R8,R9}
  4878.  R10,R6,#&4
  4879. ;3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4880. STMIA R5!,{R7,R8,R9}
  4881.  R10,R6,#&2
  4882. >HLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
  4883. STMIA R5!,{R7,R8,R9}
  4884.  R10,R6,#&1
  4885. [OPT Z
  4886.  R10,R6,#&1
  4887. EHLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4888. STMIA R5!,{R7,R8,R9}
  4889.  R10,R6,#&2
  4890. HHLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
  4891. STMIA R5!,{R7,R8,R9}
  4892.  R10,R6,#&4
  4893. K3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4894. STMIA R5!,{R7,R8,R9}
  4895.  R10,R6,#&8
  4896. NHLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
  4897. STMIA R5!,{R7,R8,R9}
  4898.  R10,R6,#&10
  4899. QHLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4900. STMIA R5!,{R7,R8,R9}
  4901.  R10,R6,#&20
  4902. THLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
  4903. STMIA R5!,{R7,R8,R9}
  4904.  R10,R6,#&40
  4905. WHLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
  4906. STMIA R5!,{R7,R8,R9}
  4907. MOV R10,R6,LSR #7
  4908. [OPT Z
  4909. ]HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4910. STMIA R5!,{R7,R8,R9}
  4911. SUBS R0,R0,#8:BHI mappixlp
  4912. MOVS PC,R14
  4913. [OPT Z
  4914. .mappix%
  4915. LDR R0,sxloc
  4916. LDR R1,[R9]:LDR R1,[R1]
  4917. LDR R2,[R9,#8]:LDR R2,[R2]
  4918. LDR R3,[R9,#4*8]
  4919. LDR R4,[R9,#3*8]
  4920. LDR R5,[R9,#2*8]
  4921. LDR R6,[R9,#5*8]
  4922. LDR R7,[R9,#6*8]
  4923. LDR R8,[R9,#7*8]
  4924. CMP R1,R2
  4925. ADDEQ R2,R2,#1
  4926. .mappixlp
  4927. q.LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
  4928. r>LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
  4929. R R9,R9,R10
  4930.  R10,R9,#255:LDR R10,[R3,R10,LSL #2]
  4931. t<MOV R11,R9,LSR #8:
  4932.  R11,R11,#255:LDR R11,[R4,R11,LSL #2]
  4933. u.MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
  4934. STMIA R8!,{R10,R11,R12}
  4935. SUBS R0,R0,#1:BNE mappixlp
  4936. MOVS PC,R14
  4937. [OPT Z
  4938. .mappix%
  4939. LDR R0,sxloc
  4940. ~ LDR R1,[R9,#2*8]:LDR R1,[R1]
  4941. LDR R2,[R9,#8]:LDR R2,[R2]
  4942. LDR R3,[R9]:LDR R3,[R3]
  4943. LDR R4,[R9,#5*8]
  4944. LDR R5,[R9,#4*8]
  4945. LDR R6,[R9,#3*8]
  4946. LDR R7,[R9,#6*8]
  4947. STMFD SP !,{R14}
  4948. $MOV r11,#0:MOV R12,#0:MOV R14,#0
  4949. .mappixlp
  4950. CLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
  4951.  hpredict%=2 
  4952. [OPT Z
  4953. ADD r8,r8,r11
  4954.  r8,r8,#255
  4955. MOV r11,r8
  4956. ADD r9,r9,r12
  4957.  r9,r9,#255
  4958. MOV r12,r9
  4959. ADD r10,r10,r14
  4960.  r10,r10,#255
  4961. MOV r14,r10
  4962. [OPT Z
  4963. GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4964. STMIA R7!,{R8,R9,R10}
  4965. SUBS R0,R0,#1:BNE mappixlp
  4966. LDMFD SP !,{PC}^
  4967. [OPT Z
  4968. .mappix%
  4969. LDR R0,sxloc
  4970.  LDR R1,[R9,#2*8]:LDR R1,[R1]
  4971. LDR R2,[R9,#8]:LDR R2,[R2]
  4972. LDR R3,[R9]:LDR R3,[R3]
  4973. LDR R4,[R9,#5*8]
  4974. LDR R5,[R9,#4*8]
  4975. LDR R6,[R9,#3*8]
  4976. LDR R7,[R9,#6*8]
  4977. STMFD SP !,{R14}
  4978. ?MOV r11,#colourindex 
  4979.  255:ADD r11,r11,#colourindex 
  4980.  &ff00
  4981. .mappixlp
  4982. @LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
  4983.  r8,r8,r11:
  4984.  r9,r9,r11:
  4985.  r10,r10,r11
  4986. GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4987. STMIA R7!,{R8,R9,R10}
  4988. SUBS R0,R0,#1:BNE mappixlp
  4989. LDMFD SP !,{PC}^
  4990. [OPT Z
  4991. .mappix%
  4992. LDR R0,sxloc
  4993. LDR R1,[R9]:LDR R1,[R1]
  4994. LDR R2,[R9,#1*8]
  4995. LDR R3,[R9,#2*8]
  4996. LDR R5,[R9,#4*8]
  4997. LDR R6,[R9,#5*8]
  4998. LDR R7,[R9,#6*8]
  4999. LDR R9,[R9,#8*8]
  5000. STMFD SP !,{R14}
  5001. .mappixlp
  5002. LDMIA R1!,{R4,R10}
  5003.  R8,R4,#&C000
  5004. MOV R8,R8,LSR #8
  5005.  R14,R4,#&C0000000
  5006. R R8,R8,R14,LSR #16+8+2
  5007.  R14,R10,#&C000
  5008. R R8,R8,R14,LSR #8+4
  5009. R R8,R8,R10,LSR #16+8+6
  5010.  R11,R4,#&3000
  5011. MOV R11,R11,LSR #6
  5012.  R14,R4,#&30000000
  5013. R R11,R11,R14,LSR #16+6+2
  5014.  R14,R10,#&3000
  5015. R R11,R11,R14,LSR #6+4
  5016.  R14,R10,#&30000000
  5017. R R11,R11,R14,LSR #16+6+6
  5018.  R12,R4,#&FF
  5019. LDR R12,[R2,R12,LSL #2]
  5020. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5021. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5022. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5023. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5024. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5025.  R12,R4,#&FF
  5026. LDR R12,[R2,R12,LSL #2]
  5027. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5028. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5029. MOV R4,R4,LSR #16
  5030.  R12,R4,#&FF
  5031. LDR R12,[R2,R12,LSL #2]
  5032. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5033. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5034. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5035. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5036. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5037.  R12,R4,#&FF
  5038. LDR R12,[R2,R12,LSL #2]
  5039. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5040. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5041.  R12,R10,#&FF
  5042. LDR R12,[R2,R12,LSL #2]
  5043. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5044. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5045. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5046. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5047. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5048.  R12,R10,#&FF
  5049. LDR R12,[R2,R12,LSL #2]
  5050. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5051. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5052. MOV R10,R10,LSR #16
  5053.  R12,R10,#&FF
  5054. LDR R12,[R2,R12,LSL #2]
  5055. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5056. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5057. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5058. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5059. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5060.  R12,R10,#&FF
  5061. LDR R12,[R2,R12,LSL #2]
  5062. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5063. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5064. SUBS R0,R0,#4:BNE mappixlp
  5065. LDMFD SP !,{PC}^
  5066. [OPT Z
  5067. .mappix%
  5068. LDR R0,sxloc
  5069. LDR R1,[R9]:LDR R1,[R1]
  5070. LDR R2,[R9,#1*8]
  5071. LDR R3,[R9,#2*8]
  5072. LDR R4,[R9,#3*8]
  5073. LDR R5,[R9,#4*8]
  5074. LDR R6,[R9,#5*8]
  5075. LDR R7,[R9,#6*8]
  5076. LDR R8,[R9,#7*8]
  5077. LDR R9,[R9,#8*8]
  5078. STMFD SP !,{R14}
  5079. .mappixlp
  5080. LDR R10,[R1],#4
  5081.  R11,R10,#&FF00
  5082. LDR R11,[R2,R11,LSR #6]
  5083.  R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
  5084.  R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
  5085. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5086.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5087.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5088. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5089.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
  5090.  R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
  5091. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5092.  R11,R10,#&FF000000
  5093. LDR R11,[R2,R11,LSR #22]
  5094.  R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
  5095.  R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
  5096. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5097.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5098.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5099. "8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5100.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
  5101.  R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
  5102. %8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5103. SUBS R0,R0,#2:BNE mappixlp
  5104. LDMFD SP !,{PC}^
  5105. [OPT Z
  5106. .mappix%
  5107. LDR R0,sxloc
  5108. LDR R1,[R9]:LDR R1,[R1]
  5109. LDR R2,[R9,#1*8]
  5110. LDR R3,[R9,#2*8]
  5111. LDR R5,[R9,#4*8]
  5112. LDR R6,[R9,#5*8]
  5113. LDR R7,[R9,#6*8]
  5114. LDR R9,[R9,#8*8]
  5115. STMFD SP !,{R14}
  5116. .mappixlp
  5117. LDR R10,[R1],#4
  5118.  R11,R10,#&FF00
  5119. LDR R11,[R2,R11,LSR #6]
  5120.  R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
  5121. :8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5122.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5123.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5124. =8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5125.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
  5126. ?8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5127.  R11,R10,#&FF000000
  5128. LDR R11,[R2,R11,LSR #22]
  5129.  R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
  5130. C8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5131.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5132.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5133. F8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5134.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
  5135. H8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5136. SUBS R0,R0,#2:BNE mappixlp
  5137. LDMFD SP !,{PC}^
  5138. [OPT Z
  5139. .mappix%
  5140. LDR R0,sxloc
  5141. LDR R1,[R9]:LDR R1,[R1]
  5142. LDR R2,[R9,#1*8]
  5143. LDR R3,[R9,#2*8]
  5144. LDR R5,[R9,#4*8]
  5145. LDR R6,[R9,#5*8]
  5146. LDR R7,[R9,#6*8]
  5147. LDR R9,[R9,#8*8]
  5148. STMFD SP !,{R14}
  5149. .mappixlp
  5150. LDR R10,[R1],#2
  5151.  R11,R10,#ymax%
  5152. LDR R11,[R2,R11,LSL #2]
  5153.  R8,R10,#((1<<vbits%)-1)<<(ybits%+ubits%)
  5154.  R10,R10,#((1<<ubits%)-1)<<ybits%
  5155. ^9LDR R12,[R7,R8,LSR #ybits%+ubits%-2]:ADDS R14,R12,R11
  5156. _8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5157. `8LDR R12,[R5,R8,LSR #ybits%+ubits%-2]:ADD R14,R12,R11
  5158. a3LDR R12,[R6,R10,LSR #ybits%-2]:ADDS R14,R14,R12
  5159. b8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5160. c3LDR R12,[R3,R10,LSR #ybits%-2]:ADDS R14,R12,R11
  5161. d8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5162. SUBS R0,R0,#1:BNE mappixlp
  5163. LDMFD SP !,{PC}^
  5164.  xmul%=2 
  5165.  xdiv%=1 
  5166. [OPT Z
  5167. .xsample%
  5168. LDR R0,[R9]:LDR R0,[R0]
  5169. LDR R1,[R9,#8]
  5170. LDR R2,[R9,#2*8]
  5171. SUBS R0,R0,#2
  5172. BEQ xdonediv
  5173. BMI xdonediv
  5174. .xsamplelp
  5175. s!LDMIA R1,{R5,R6,R7,R8,R9,R10}
  5176. ADD R8,R8,R5
  5177. MOV R8,R8,LSR #1
  5178. ADD R9,R9,R6
  5179. MOV R9,R9,LSR #1
  5180. ADD R10,R10,R7
  5181. MOV R10,R10,LSR #1
  5182. z"STMIA R2!,{R5,R6,R7,R8,R9,R10}
  5183. ADD R1,R1,#12
  5184. SUBS R0,R0,#2:BGT xsamplelp
  5185. .xdonediv
  5186. LDMIA R1,{R5,R6,R7}
  5187. MOV R8,R5
  5188. MOV R9,R6
  5189. MOV R10,R7
  5190. "STMIA R2!,{R5,R6,R7,R8,R9,R10}
  5191. MOVS PC,R14
  5192. [OPT Z
  5193. .xsample%
  5194. LDR R0,[R9]:LDR R0,[R0]
  5195. LDR R1,[R9,#8]
  5196. LDR R2,[R9,#2*8]
  5197.  LDR R3,[R9,#3*8]:LDR R3,[R3]
  5198.  LDR R4,[R9,#4*8]:LDR R4,[R4]
  5199. MOV R11,R4
  5200. .xsamplelp
  5201. LDMIA R1,{R5,R6,R7}
  5202. -SUBS R11,R11,#1:
  5203. Q R11,R4:ADDEQ R1,R1,#12
  5204. SUBS R12,R3,#1
  5205. BEQ xdonediv
  5206. .xdivlp
  5207. CMP R12,R11
  5208. BCC xdivlp2
  5209. MLDMIA R1!,{R8,R9,R10}:MLA R5,R8,R11,R5:MLA R6,R9,R11,R6:MLA R7,R10,R11,R7
  5210. SUBS R12,R12,R11:MOV R11,R4
  5211. BNE xdivlp
  5212. B xdonediv
  5213. .xdivlp2
  5214. LDMIA R1,{R8,R9,R10}
  5215. -SUBS R11,R11,#1:
  5216. Q R11,R4:ADDEQ R1,R1,#12
  5217. +ADD R5,R5,R8:ADD R6,R6,R9:ADD R7,R7,R10
  5218. SUBS R12,R12,#1:BNE xdivlp
  5219. .xdonediv
  5220. STMIA R2!,{R5,R6,R7}
  5221. SUBS R0,R0,#1:BPL xsamplelp
  5222. MOVS PC,R14
  5223.  compression=5 
  5224. [OPT Z
  5225. .firstcode DCD 0
  5226. .oldcode DCD 0
  5227. .codesize DCD setcodes%+1
  5228. .stack DCD stk%
  5229. .sp DCD stk%
  5230. .maxcode DCD clearcode%+2
  5231. !.maxcodesize DCD 2*clearcode%
  5232. .LZWdecode%
  5233. @LDR R2,firstcode:LDR R3,oldcode:LDR R4,stack:LDR R5,codesize
  5234. /LDR R6,sp:LDR R7,maxcode:LDR R8,maxcodesize
  5235. LDR R10,[R9]:LDR R10,[R10]
  5236. !LDR R11,[R9,#8]:LDR R11,[R11]
  5237. LDR R12,[R9,#24]
  5238. STMFD SP !,{R14}
  5239. .lzwloop
  5240. CMP R6,R4
  5241. BHI lzwunstack
  5242. .lzwengine
  5243. BL getcode
  5244. CMP R0,#clearcode%
  5245. BEQ lzwclear
  5246. MOV R1,R0
  5247. CMP R0,R7
  5248. STRCSB R2,[R6],#1
  5249. MOVCS R0,R3
  5250. CMP R0,#clearcode%
  5251. BCC lzwdonepush
  5252. .lzwpushtable
  5253. LDR R14,[R12,R0,LSL #2]
  5254. STRB R14,[R6],#1
  5255. MOV R0,R14,LSR #16
  5256. CMP R0,#clearcode%
  5257. BCS lzwpushtable
  5258. .lzwdonepush
  5259. LDR R2,[R12,R0,LSL #2]
  5260. BIC R2,R2,#&FF0000
  5261. BIC R2,R2,#&FF000000
  5262. STRB R2,[R6],#1
  5263. CMP R7,#4096
  5264. BCS lzwnocode
  5265. R R0,R2,R3,LSL #16
  5266. STR R0,[R12,R7,LSL #2]
  5267. ADD R7,R7,#1
  5268. CMP R7,R8
  5269. BCC lzwnocode
  5270. CMP R8,#4096
  5271. ADDCC R5,R5,#1
  5272. MOVCC R8,R8,LSL #1
  5273.  flag=1500 
  5274. [OPT Z
  5275. RCC R8,R8,#1
  5276. [OPT Z
  5277. .lzwnocode
  5278. MOV R3,R1
  5279. CMP R6,R4
  5280. BLS lzwengine
  5281. .lzwunstack
  5282. LDRB R0,[R6,#-1]!
  5283. .lzwloopend
  5284. STRB R0,[R11],#1
  5285. SUBS R10,R10,#1
  5286. BNE lzwloop
  5287. 3STR R2,firstcode:STR R3,oldcode:STR R5,codesize
  5288. /STR R6,sp:STR R7,maxcode:STR R8,maxcodesize
  5289. LDMFD SP !,{PC}^
  5290. .lzwclear
  5291. MOV R0,#0
  5292. MOV R3,R12
  5293. .lzwdefaulttable
  5294. STR R0,[R3],#4
  5295. #ADD R0,R0,#1:CMP R0,#clearcode%
  5296. BCC lzwdefaulttable
  5297. MOV R5,#setcodes%+1
  5298. MOV R7,#clearcode%
  5299. MOV R8,R7,LSL #1
  5300.  flag=1500 
  5301. [OPT Z
  5302. SUB R8,R8,#1
  5303. [OPT Z
  5304. ADD R7,R7,#2
  5305. BL getcode
  5306. MOV R2,R0
  5307. MOV R3,R0
  5308. MOV R6,R4
  5309. B lzwloopend
  5310. .curbit DCD 0
  5311. .lastbit DCD 0
  5312. .buf DCD buf%
  5313. .getcode
  5314. STMFD SP !,{R6,R7,R8}
  5315. ADR R6,curbit
  5316. LDMIA R6,{R6,R7,R8}
  5317. ADD R1,R5,R6
  5318. CMP R1,R7
  5319. BCS needmoredata
  5320. .simplecode
  5321. ADD R7,R8,R6,LSR #3
  5322. BIC R7,R7,#3
  5323. LDMIA R7,{R0,R7}
  5324.  flag=1500 
  5325. [OPT Z
  5326.  R1,R0,R0,ROR #16
  5327. BIC R1,R1,#&FF0000
  5328. MOV R0,R0,ROR #8
  5329.  R0,R0,R1,LSR #8
  5330.  R1,R7,R7,ROR #16
  5331. BIC R1,R1,#&FF0000
  5332. MOV R7,R7,ROR #8
  5333.  R7,R7,R1,LSR #8
  5334. S R1,R6,#31:MOVNE R0,R0,LSL R1:RSBNE R1,R1,#32:
  5335. RNE R0,R0,R7,LSR R1
  5336. RSB R1,R5,#32
  5337. MOV R0,R0,LSR R1
  5338. [OPT Z
  5339. S R1,R6,#31:MOVNE R0,R0,LSR R1:RSBNE R1,R1,#32:
  5340. RNE R0,R0,R7,LSL R1
  5341. #!MVN R1,#0:BIC R0,R0,R1,LSL R5
  5342. [OPT Z
  5343. ADD R6,R6,R5
  5344. STR R6,curbit
  5345. LDMFD SP !,{R6,R7,R8}
  5346. MOV PC,R14
  5347. .needmoredata
  5348. STMFD SP !,{R2,R3,R4,R14}
  5349. MOV R3,R7,LSR #3
  5350. SUB R0,R3,#2
  5351. LDRB R0,[R8,R0]
  5352. STRB R0,[R8]
  5353. SUB R0,R3,#1
  5354. LDRB R0,[R8,R0]
  5355. STRB R0,[R8,#1]
  5356. LDR R1,[R9,#16]
  5357. LDR R1,[R1]
  5358.  flag=1500 
  5359. [OPT Z
  5360. MOV R0,#256
  5361. MOV R3,#256
  5362. [OPT Z
  5363. BL bytefromcache%
  5364. MOVS R3,R0
  5365. BEQ simplecode1
  5366. [OPT Z
  5367. SUB R6,R6,R7
  5368. ADD R6,R6,#16
  5369. ADD R0,R0,#2
  5370. MOV R7,R0,LSL #3
  5371. STR R7,lastbit
  5372. ADD R2,R8,#2
  5373. BL multibytefromcache%
  5374. .simplecode1
  5375. LDMFD SP !,{R2,R3,R4,R14}
  5376. B simplecode
  5377.  range% 
  5378. [OPT Z
  5379. .maxmin%
  5380. LDR R0,[R9]:LDR R0,[R0]
  5381. LDR R1,[R9,#8]
  5382. LDR R2,min
  5383. LDR R3,max
  5384. .maxminlp
  5385. LDR R4,[R1],#4
  5386. CMP R4,R3:MOVCS R3,R4
  5387. CMP R4,R2:MOVCC R2,R4
  5388. SUBS R0,R0,#1:BNE maxminlp
  5389. STR R2,min
  5390. STR R3,max
  5391. MOVS PC,R14
  5392. .min DCD F
  5393. .max DCD 0
  5394.  sharpen% 
  5395. d"sharp=(col+1)*4:
  5396.  sharpen%>0 
  5397.  sharpen%<>8 sharpmul%=F/(sharpen%-8)
  5398. sharpmul%=F/(8-sharpen%)
  5399. [OPT Z
  5400. .sharp%
  5401. LDR R0,[R9]:LDR R0,[R0]
  5402. LDR R1,[R9,#8]
  5403. LDR R2,[R9,#16]
  5404. LDR R3,[R9,#24]
  5405. LDR R4,[R9,#32]
  5406.  sharpen% 
  5407.  8,9,12,16,24
  5408. [OPT Z
  5409. MOV R8,#sharpmul% 
  5410. R R8,R8,#sharpmul% 
  5411.  &FF00
  5412. x#MOV R9,#(sharpmul% >> 16) 
  5413. R R9,R9,#(sharpmul% >> 16) 
  5414.  &FF00
  5415. [OPT Z
  5416. .sharplp
  5417. LDR R5,[R1,#-sharp]
  5418. #LDR R6,[R1,#sharp]:ADD R5,R5,R6
  5419. LDR R6,[R1],#4:ADD R5,R5,R6
  5420. $LDR R6,[R3,#-sharp]:ADD R5,R5,R6
  5421. #LDR R6,[R3,#sharp]:ADD R5,R5,R6
  5422. LDR R6,[R3],#4:ADD R5,R5,R6
  5423. $LDR R6,[R2,#-sharp]:ADD R5,R5,R6
  5424. #LDR R6,[R2,#sharp]:ADD R5,R5,R6
  5425. LDR R6,[R2],#4
  5426. MOV R6,R6,LSR #1
  5427. MOV R7,#
  5428.  sharpen%
  5429. MUL R7,R6,R7
  5430.  sharpen%>0 
  5431. [OPT Z
  5432. SUBS R5,R7,R5,LSR #1
  5433. MOVCC R5,#0
  5434. [OPT Z
  5435. ADD R5,R7,R5,LSR #1
  5436.  sharpen% 
  5437. [OPT Z
  5438. MOV R6,R5,LSL #1
  5439. [OPT Z
  5440. MOV R6,R5
  5441. [OPT Z
  5442. MOV R6,R5,LSR #1
  5443. [OPT Z
  5444. MOV R6,R5,LSR #2
  5445.  -8,24
  5446. [OPT Z
  5447. MOV R6,R5,LSR #3
  5448. [OPT Z
  5449. MOV R6,R5,LSR #16
  5450.  R5,R5,R6,LSL #16
  5451. MUL R7,R8,R5
  5452. MUL R5,R9,R5
  5453. MUL R10,R6,R8
  5454. MUL R6,R9,R6
  5455. ADDS R10,R5,R10
  5456. ADDCS R6,R6,#&10000
  5457. ADDS R7,R7,R10,LSL #16
  5458. ADC R6,R6,R10,LSR #16
  5459. MOV R6,R6,LSL #(32-27)
  5460. RS R6,R6,R7,LSR #27
  5461. ADDCS R6,R6,#1
  5462.  sharpen%>0 
  5463. [OPT Z
  5464. CMP R6,#F:MOVCS R6,#F
  5465. [OPT Z
  5466. STR R6,[R4],#4
  5467. SUBS R0,R0,#1
  5468. BNE sharplp
  5469. MOVS PC,R14
  5470.  hist%
  5471. equal% 
  5472. [OPT Z
  5473. .histo%
  5474. LDR R0,[R9]:LDR R0,[R0]
  5475. LDR R1,[R9,#8]
  5476. LDR R2,[R9,#16]
  5477. .histlp
  5478. (LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5479. MOV R3,R3,LSR #bits-8
  5480.  col=2 
  5481. [OPT Z
  5482. ADD R3,R3,R3,LSL #1
  5483. <LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5484. (LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5485. MOV R3,R3,LSR #bits-8
  5486. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
  5487. <LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5488. (LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5489. MOV R3,R3,LSR #bits-8
  5490. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
  5491. [OPT Z
  5492. <LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5493. SUBS R0,R0,#1
  5494. BNE histlp
  5495. MOVS PC,R14
  5496.  equal% 
  5497. [OPT Z
  5498. .histequal%
  5499. LDR R0,[R9]:LDR R0,[R0]
  5500. LDR R1,[R9,#8]
  5501. LDR R2,[R9,#16]
  5502. .equallp
  5503. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5504. MOV R3,R3,LSR #bits-8
  5505.  col=2 
  5506. [OPT Z
  5507. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5508. MOV R3,R3,LSR #bits-8
  5509. ADD R3,R3,R3,LSL #1
  5510. (LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5511. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5512. MOV R3,R3,LSR #bits-8
  5513. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
  5514. (LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5515. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5516. MOV R3,R3,LSR #bits-8
  5517. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
  5518. [OPT Z
  5519. (LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5520. SUBS R0,R0,#1
  5521. BNE equallp
  5522. MOVS PC,R14
  5523.  "FN800","FN801","FN1000","FN1001"
  5524. [OPT Z
  5525. .rlexpand%
  5526. LDR R0,[R9]
  5527. LDR R1,[R0]
  5528. LDR R2,[R9,#8]:LDR R2,[R2]
  5529. LDR R3,[R9,#16]
  5530. LDR R4,[R3]
  5531. CMP R4,#1:MOVLTS PC,R14
  5532. LDR R5,[R9,#24]:LDR R5,[R5]
  5533. STRB R2,[R1],#1
  5534. SUB R4,R4,#1
  5535. CMP R1,R5
  5536. TEQNE R4,#0
  5537. BNE rle
  5538. .rlexit
  5539. STR R1,[R0]
  5540. STR R4,[R3]
  5541. MOVS PC,R14
  5542.  "FN902"
  5543. [OPT Z
  5544. .unpack%
  5545. LDR R0,[R9]
  5546. LDR R0,[R0]
  5547. LDR R1,plbuff
  5548. ADD R2,R0,#768
  5549. .unpackloop
  5550. LDR R3,[R0],#4
  5551. MOV R5,#0
  5552. .bitloop
  5553. MOV R6,R3,LSR R5
  5554.  R6,R6,#15
  5555. ADD R5,R5,#4
  5556. MOV R7,R3,LSR R5
  5557.  R7,R7,#15
  5558. ADD R5,R5,#4
  5559. STRB R7,[R1],#1
  5560. STRB R6,[R1],#1
  5561. CMP R5,#32
  5562. BNE bitloop
  5563. CMP R2,R0
  5564. BNE unpackloop
  5565. MOV PC,R14
  5566. .plbuff EQUD plbuff%
  5567.  "FN1601","FN1501","FN1850","FN1851"
  5568. [OPT Z
  5569. .readiff%
  5570. MOV R1,#c%
  5571. LDR R8,[R9]:LDR R8,[R8]
  5572. :+LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5573. STMFD SP !,{R14}
  5574.  r$="FN1850" 
  5575.  r$="FN1851" 
  5576. [OPT Z
  5577. BL bytefromcache%
  5578.  sy%>250 
  5579. [OPT Z
  5580. BL bytefromcache%
  5581. [OPT Z
  5582. BL bytefromcache%
  5583. CMP R0,#128
  5584. BCC rle1
  5585. RSB R2,R0,#256
  5586. BL bytefromcache%
  5587. .rle0 STRB R0,[R8],#1
  5588. SUBS R2,R2,#1
  5589. BPL rle0
  5590. B rle2
  5591. R    .rle1
  5592. ADD R3,R0,#1
  5593. MOV R2,R8
  5594. ADD R8,R8,R3
  5595. BL multibytefromcache%
  5596. W    .rle2
  5597. CMP R8,R7
  5598. BCC rle
  5599. LDMFD SP !,{R14}
  5600. MOVS PC,R14
  5601.  "FN1900","FN1100","FN400"
  5602. [OPT Z
  5603. .readline%
  5604. LDR R2,[R9]:LDR R2,[R2]
  5605. LDR R3,[R9,#8]
  5606. LDR R0,[R3]
  5607. LDR R4,[R9,#16]
  5608. LDR R5,[R4]
  5609. e,LDR R6,[R9,#24]:LDR R6,[R6]:ADD R6,R6,R2
  5610. STMFD SP !,{R14}
  5611. CMP R5,#1
  5612. BGE rle1
  5613. BL bytefromcache%
  5614. MOV R5,#1
  5615.  flag=1900 
  5616. [OPT Z
  5617. CMP R0,#192
  5618. CS R5,R0,#63:BLCS bytefromcache%
  5619.  flag=1100 
  5620. [OPT Z
  5621. CMP R0,#128
  5622. BNE rle1
  5623. BL bytefromcache%
  5624. TEQ R0,#0
  5625. Q R0,#128
  5626. BEQ rle1
  5627. ADD R5,R0,#1
  5628. BL bytefromcache%
  5629.  flag=400 
  5630. [OPT Z
  5631. MOV R1,R0
  5632. BL bytefromcache%
  5633. R R1,R1,R0,LSL #8
  5634. BL bytefromcache%
  5635. R R1,R1,R0,LSL #16
  5636. BL bytefromcache%
  5637. ADD R5,R0,#1
  5638. MOV R0,R1
  5639.  flag=200 
  5640. [OPT Z
  5641. ADD R5,R0,#1
  5642. BL bytefromcache%
  5643. [OPT Z
  5644.     .rle1
  5645. STRB R0,[R2],#1
  5646.  flag=400 
  5647. [OPT Z
  5648. MOV R1,R0,LSR #8
  5649. STRB R1,[R2],#1
  5650. MOV R1,R0,LSR #16
  5651. STRB R1,[R2],#1
  5652. [OPT Z
  5653. SUB R5,R5,#1
  5654. TEQ R2,R6
  5655. BNE rle
  5656. .rlexit
  5657. STR R0,[R3]:STR R5,[R4]
  5658. LDMFD SP !,{PC}^
  5659.  "FN2401"
  5660. [OPT Z
  5661. .bm_rle8
  5662. MOV R1,#c%
  5663. LDR R8,[R9]:LDR R8,[R8]
  5664. +LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5665. STMFD SP !,{R14}
  5666. BL bytefromcache%
  5667. TEQ r0,#0
  5668. BEQ rlecopy
  5669. MOV r4,r0
  5670. BL bytefromcache%
  5671.     .rle1
  5672. STRB r0,[r8],#1
  5673. SUBS r4,r4,#1
  5674. BGT rle1
  5675.     B rle
  5676. .rlecopy
  5677. BL bytefromcache%
  5678. CMP r0,#3
  5679. BLT rlespecial
  5680. MOV r4,r0
  5681.     .rle2
  5682. BL bytefromcache%
  5683. STRB r0,[r8],#1
  5684. BL bytefromcache%
  5685. SUBS r4,r4,#1
  5686. STRGTB r0,[r8],#1
  5687. SUBGTS r4,r4,#1
  5688. BGT rle2
  5689.     B rle
  5690. .rlespecial
  5691. LDMFD SP !,{R14}
  5692. MOVS PC,R14
  5693.  "FN2402"
  5694. [OPT Z
  5695. .bm_rle4
  5696. MOV R1,#c%
  5697. LDR R8,[R9]:LDR R8,[R8]
  5698. +LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5699. STMFD SP !,{R14}
  5700. MOV r2,#0
  5701. MOV r3,#0
  5702. BL bytefromcache%
  5703. TEQ r0,#0
  5704. BEQ rlecopy
  5705. MOV r4,r0
  5706. BL bytefromcache%
  5707.     .rle1
  5708. BL bmrle4_insert
  5709. CMP r3,#8
  5710. MOVGE r5,r2,LSR#24
  5711. STRGEB r5,[r8],#1
  5712. MOVGE r2,r2,LSL#8
  5713. SUBGE r3,r3,#8
  5714. CMP r4,#0
  5715. BGT rle1
  5716.     B rle
  5717. .rlecopy
  5718. BL bytefromcache%
  5719. CMP r0,#3
  5720. BLT rlespecial
  5721. MOV r4,r0
  5722.     .rle2
  5723. BL bytefromcache%
  5724. BL bmrle4_insert
  5725. BL bytefromcache%
  5726. CMP r4,#0
  5727. BLGT bmrle4_insert
  5728. B rle4
  5729.     .rle3
  5730. MOV r5,r2,LSR#24
  5731. STRB r5,[r8],#1
  5732. MOV r2,r2,LSL#8
  5733. SUB r3,r3,#8
  5734.     .rle4
  5735. CMP r3,#8
  5736. BGE rle3
  5737. CMP r4,#0
  5738. BGT rle2
  5739.     B rle
  5740. .rlespecial
  5741. CMP r3,#0
  5742. MOVGT r5,r2,LSR#24
  5743. STRGTB r5,[r8],#1
  5744. LDMFD SP !,{R14}
  5745. MOVS PC,R14
  5746. .bmrle4_insert
  5747. RSB r5,r3,#32
  5748. MOV r2,r2,LSR r5
  5749. MOV r2,r2,LSL r5
  5750. SUB r5,r5,#8
  5751. R r2,r2,r0,LSL r5
  5752. SUBS r4,r4,#2
  5753. ADDMI r3,r3,#4
  5754. ADDPL r3,r3,#8
  5755. MOVS PC,R14
  5756.  cachebytes% 
  5757. [OPT Z
  5758. .bytefromcache%
  5759. STMFD SP !,{R1,R2}
  5760. LDR R1,incacheptr
  5761. LDR R2,numlefttogo
  5762. LDRB R0,[R1],#1
  5763. SUBS R2,R2,#1
  5764. STRNE R1,incacheptr
  5765. STRNE R2,numlefttogo
  5766. LDMFD SP !,{R1,R2}
  5767. MOVNE PC,R14
  5768. STMFD SP !,{R0,R1,R2,R3,R4}
  5769. LDR R2,valdatacache
  5770. STR R2,incacheptr
  5771. LDR R3,valcache
  5772. STR R3,numlefttogo
  5773. MOV R0,#4
  5774. MOV R1,#c%
  5775. SWI "OS_GBPB"
  5776. LDMFD SP !,{R0,R1,R2,R3,R4}
  5777. MOV PC,R14
  5778. ! .valdatacache DCD datacache%
  5779. .valcache DCD cache%
  5780. .incacheptr DCD datacache%
  5781. .numlefttogo DCD cache%
  5782. .multibytefromcache%
  5783. CMP R3,#0
  5784. Q PC,R14
  5785. STMFD SP !,{R0,R14}
  5786. .multibytefromcachel
  5787. BL bytefromcache%
  5788. STRB R0,[R2],#1
  5789. SUBS R3,R3,#1
  5790. BNE multibytefromcachel
  5791. LDMFD SP !,{R0,R14}
  5792. MOV PC,R14
  5793.  planar%<0 
  5794. C%=7:
  5795.  flag=2600 C%=15
  5796. [OPT Z
  5797. .plancnv%
  5798. LDR R0,sxloc
  5799. LDR R1,[R9]:LDR R1,[R1]
  5800. LDR R3,[R9,#8]:LDR R3,[R3]
  5801. LDR R4,[R9,#16]:LDR R4,[R4]
  5802.  flag=3500 
  5803. [OPT Z
  5804. MOV R9,#0
  5805. [OPT Z
  5806. MOV R9,#C%
  5807. [OPT Z
  5808. .planelp
  5809. MOV R7,#0
  5810. MOV R5,R3
  5811.  N%=1
  5812. planes%
  5813. [OPT Z
  5814. LDR R6,[R5],R4
  5815.  flag=2600 
  5816. [OPT Z
  5817. MOV R6,R6,LSL #8
  5818. BIC R6,R6,#&FF000000
  5819. R R6,R6,R6,LSR #16
  5820.  flag=3500 
  5821. [OPT Z
  5822. MOV R6,R6,LSR R9
  5823. S R6,R6,#1
  5824. R R7,R7,R6,LSL #(planes%-N%)
  5825. RNE R7,R7,#(planes%-1)
  5826. [OPT Z
  5827. MOV R6,R6,LSR R9
  5828.  R6,R6,#1
  5829. R R7,R7,R6,LSL #(N%-1)
  5830. [OPT Z
  5831. STRB R7,[R1],#1
  5832.  flag=3500 
  5833. [OPT Z
  5834. ADD R9,R9,#1
  5835. CMP R9,#C%+1
  5836. Q R9,#0
  5837. [OPT Z
  5838. SUBS R9,R9,#1:MOVMI R9,#C%
  5839.  flag 
  5840.  2600
  5841. [OPT Z
  5842. MOVMI R3,R5
  5843.  3500
  5844. [OPT Z
  5845. ADDEQ R3,R3,#1
  5846. [OPT Z
  5847. ADDMI R3,R3,#1
  5848. [OPT Z
  5849. SUBS R0,R0,#1:BNE planelp
  5850. MOVS PC,R14
  5851. cputime%=
  5852.  cache% 
  5853.  flag=3600 
  5854. Epcdblk%!12=cacherows%:
  5855. refillpcd:
  5856.  cache%>=filesize% rowstogo%=-1
  5857.  striprows%>0
  5858. compression>1 
  5859. 12,4,c%,datacache%,cache%
  5860.  cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
  5861. refill:
  5862.  cache%>=filesize% rowstogo%=-1
  5863. sizeshft%=0:
  5864.  ncol 
  5865.  2^24-1:size%=1
  5866.  2^15-1:size%=1
  5867.  63,255,256:size%=1
  5868.  15:size%=2:sizeshft%=1
  5869.  3:size%=4:sizeshft%=2
  5870.  1:size%=8:sizeshft%=3:
  5871.  m$="C" size%=2:sizeshft%=1
  5872.  m$="D" size%=4:sizeshft%=2
  5873.  m$="T" size%=2:sizeshft%=1
  5874.  flag 
  5875.  501:
  5876.  info% 
  5877. "Reading interlaced GIF"
  5878. %sz%=sx%*sy%:plbuff%=
  5879. dim(sz%+100)
  5880.  Y%=0
  5881. sy%-1
  5882. 8:X%=plbuff%+Y%*sx%:
  5883.  LZWdecode%,table%(0),c%,X%,sx%:
  5884.  Y%=4
  5885. sy%-1
  5886. 8:X%=plbuff%+Y%*sx%:
  5887.  LZWdecode%,table%(0),c%,X%,sx%:
  5888.  Y%=2
  5889. sy%-1
  5890. 4:X%=plbuff%+Y%*sx%:
  5891.  LZWdecode%,table%(0),c%,X%,sx%:
  5892.  Y%=1
  5893. sy%-1
  5894. 2:X%=plbuff%+Y%*sx%:
  5895.  LZWdecode%,table%(0),c%,X%,sx%:
  5896. ?datacache%=plbuff%:buff%=plbuff%:rowbytes%=sx%:rowstogo%=-1
  5897.  gamma<>1 
  5898.  gamma<>0 
  5899.  k=1/gamma:
  5900.  C%=0
  5901. colourindex
  5902.  r%(C%) r%(C%)=((r%(C%)/F)^k)*F
  5903.  g%(C%) g%(C%)=((g%(C%)/F)^k)*F
  5904.  b%(C%) b%(C%)=((b%(C%)/F)^k)*F
  5905. rmax=F:gmax=F:bmax=F
  5906.  col=0 
  5907.  input<9 
  5908.  C%=0
  5909. 255:r%(C%)=r%(C%)*rwt+g%(C%)*gwt+b%(C%)*bwt:
  5910.  input<400 
  5911. $rmax=F*rwt:gmax=F*gwt:bmax=F*bwt
  5912.  C%=0
  5913. colourindex:r%(C%)=r%(C%)*rwt:g%(C%)=g%(C%)*gwt:b%(C%)=b%(C%)*bwt:
  5914. order% 
  5915. adjustpalette(1/ydiv%/xdiv%,0)
  5916.  range% 
  5917.  info% 
  5918. "Scanning data to compute parameters for '-range'"
  5919.  order% 
  5920. Y%=0:
  5921.  hour%,Y%*100
  5922. (r$+"(xp%())"):
  5923.  maxmin%,xp%(1,0),totvals2%:Y%+=1
  5924.  Y%=sy% 
  5925. !min<255 
  5926. !max+255>=F
  5927. 'Y%=0:ysamp%=1:
  5928.  hour%,Y%*100
  5929. scaledpixelrow(cl%()):
  5930.  maxmin%,cl%(1,0),totvals%:Y%+=1
  5931.  Y%=y% 
  5932.  !min<255 
  5933.  !max+255>=F
  5934. !max+255>=F 
  5935. !min<255 range%=
  5936. :range$="No point in '-range' on this image"
  5937.  range% 
  5938. adjustpalette(F/(!max-!min),!min/ydiv%/xdiv%):range$="Input image maximum "+
  5939. (!max/F*100)+"% minimum "+
  5940. (!min/F*100)+"%"
  5941. rewind:
  5942.  info% 
  5943.  range$
  5944.  hist% 
  5945. equal% 
  5946.  equal% 
  5947.  info% 
  5948. "Scanning data to compute parameters for '-equal'"
  5949.  order% 
  5950.  yr%=0
  5951. sy%-1:
  5952.  hour%,yr%*100
  5953. (r$+"(xp%())"):
  5954.  histo%,xp%(1,0),vals%(0,0),sx%
  5955. .ysamp%=1:
  5956.  yr%=0
  5957. y%-1:
  5958.  hour%,yr%*100
  5959. scaledpixelrow(cl%()):
  5960.  histo%,cl%(1,0),vals%(0,0),x%
  5961.  info% 
  5962. "Done. Now processing the picture"
  5963.  input<400 
  5964.  C%=0
  5965. colourindex
  5966.  r%(C%)<0 r%(C%)=0
  5967.  g%(C%)<0 g%(C%)=0
  5968.  b%(C%)<0 b%(C%)=0
  5969.  r%(C%)>rmax r%(C%)=rmax
  5970.  g%(C%)>gmax g%(C%)=gmax
  5971.  b%(C%)>bmax b%(C%)=bmax
  5972.  hist% 
  5973. M%=0:ZM%=-1:
  5974.  C%=0
  5975.  Z%=0
  5976.  vals%(Z%,C%)>M% M%=vals%(Z%,C%):ZM%=Z%
  5977.  ZM%=-1 
  5978.  okinfo%=0 
  5979.  col>0 
  5980. 66:ht=500
  5981. <>66 
  5982. 16:ht=400
  5983. 0,6,2000,6
  5984. 18:ht=400:
  5985. 0,6,1024,6
  5986. $M=M%/(ht*2-8):
  5987.  C%=0
  5988.  col>0 
  5989.  Z%=0
  5990.  vals%(Z%,C%) X%=Z%*3+C%<<1:
  5991.  X%,8,X%,vals%(Z%,C%)/M+8
  5992.  Z%=0
  5993.  vals%(Z%,C%) X%=Z%<<2:
  5994.  X%,8,2,vals%(Z%,C%)/M
  5995. close:
  5996. "Hourglass_Off"
  5997.  m>=0 oname$="p"+
  5998.  m+m$ 
  5999.  oname$=m$
  6000.  m=-6 
  6001. m=-7 
  6002. m=-8 oname$=pnm$
  6003.  range% oname$+="r"
  6004.  equal% oname$+="e"
  6005.  sharpen% oname$+="s"+
  6006.  sharpen%
  6007.  black% oname$+="b"+
  6008.  black%
  6009.  gamma<>1 A%=@%:@%=&1020100:oname$+="g"+
  6010.  gamma:@%=A%
  6011.  bright%=16 oname$+="b"
  6012. *xsp%=x%:ysp%=y%:
  6013.  rotate% 
  6014.  xsp%,ysp%
  6015.  rotate% 
  6016.  hflip% 
  6017.  vflip% 
  6018.  m=-9 
  6019.  m=-10 
  6020.  m-=2
  6021.  m=-9
  6022. m=-10 
  6023.  jpq%(20)
  6024. [jpq%()=60,75,90,105,120,135,150,160,170,180,190,205,215,235,255,280,320,380,500,750,850
  6025.  -1:xwords%=xsp%:sz%=xwords%*ysp%:Y%=ysp%
  6026. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6027.  -3,-5:xwords%=xsp%*2:sz%=xwords%*ysp%:Y%=ysp%
  6028. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6029.  -4:xwords%=xsp%*3:sz%=xwords%*ysp%:Y%=ysp%
  6030. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6031.  -6:xwords%=xsp%*2+3
  6032. 3:sz%=xwords%*ysp%:Y%=ysp%
  6033. 'A%=Y%:
  6034. getoutput(sz%,64,xwords%,Y%)
  6035. 1ram%!4=0:ram%!8=16:ram%!12=16:
  6036. &2e,&109,ram%
  6037. &2e,&10f,ram%,oname$,0,xsp%*2,Y%,28
  6038. Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6039. )ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6040. >base%!(10*4)=5<<27 
  6041.  nx<<1 
  6042.  ny<<14 
  6043.  1:base%+=base%!(8*4)
  6044.  -7:xwords%=xsp%*3+3
  6045. 3:sz%=xwords%*ysp%:Y%=ysp%
  6046. 'A%=Y%:
  6047. getoutput(sz%,64,xwords%,Y%)
  6048. 1ram%!4=0:ram%!8=16:ram%!12=16:
  6049. &2e,&109,ram%
  6050. &2e,&10f,ram%,oname$,0,xsp%*3,Y%,28
  6051. Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6052. )ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6053. Bbase%!(10*4)=panic<<27 
  6054.  nx<<1 
  6055.  ny<<14 
  6056.  1:base%+=base%!(8*4)
  6057. 4no magic number yet for new format 24bpp sprites
  6058.  -8:xwords%=xsp%*4:sz%=xwords%*ysp%:Y%=ysp%
  6059. 'A%=Y%:
  6060. getoutput(sz%,64,xwords%,Y%)
  6061.  1ram%!4=0:ram%!8=16:ram%!12=16:
  6062. &2e,&109,ram%
  6063. &2e,&10f,ram%,oname$,0,xsp%*4,Y%,28
  6064. "Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6065. #)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6066. $>base%!(10*4)=6<<27 
  6067.  nx<<1 
  6068.  ny<<14 
  6069.  1:base%+=base%!(8*4)
  6070.  -9:xwords%=xsp%+3
  6071. 3:sz%=(xsp%+7
  6072. 7)*(ysp%+7
  6073. 7):Y%=ysp%
  6074. &)sz%=sz%*jpq%(jpegquality%
  6075. 5)/588+1024
  6076. '&jpegwrk%=
  6077. dim((xsp%+7
  6078. 7)*9+20000)
  6079. base%=
  6080. dim(xwords%)
  6081. getoutputjp(sz%)
  6082. *N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
  6083. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
  6084. 7)*9+20000 
  6085.  jpegtag%
  6086.  -10:xwords%=xsp%*3+3
  6087. 3:sz%=(xsp%+15
  6088. 15)*(ysp%+15
  6089. 15)*12/8:Y%=ysp%
  6090. -)sz%=sz%*jpq%(jpegquality%
  6091. 5)/588+1024
  6092. .)jpegwrk%=
  6093. dim((xsp%+15
  6094. 15)*30+20000)
  6095. base%=
  6096. dim(xwords%)
  6097. getoutputjp(sz%)
  6098. 1N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
  6099. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
  6100. 15)*30+20000 
  6101.  jpegtag%
  6102.  -11:xwords%=xsp%:sz%=xwords%*ysp%+20000:Y%=ysp%
  6103. 4&jpegwrk%=
  6104. dim((xsp%+7
  6105. 7)*9+20000)
  6106. getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
  6107.  -12:xwords%=xsp%*3:sz%=xwords%*ysp%+20000:Y%=ysp%
  6108. 7)jpegwrk%=
  6109. dim((xsp%+15
  6110. 15)*30+20000)
  6111. getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
  6112. :xwords%=xsp%/size%+3.9999
  6113. 3:sz%=xwords%*ysp%:X%=xsp%:Y%=ysp%
  6114.  ncol=1 
  6115. "C":!rowinc=xwords%:xwords%=xwords%*4:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*4
  6116. "T":!rowinc=xwords%:xwords%=xwords%*3:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*3
  6117. "D":!rowinc=xwords%:xwords%=xwords%*2:sz%=xwords%*ysp%:X%=xsp%*2:Y%=ysp%*2
  6118. A,A%=Y%:
  6119. getoutput(sz%,2048+64,xwords%,Y%)
  6120. B1ram%!4=0:ram%!8=16:ram%!12=16:
  6121. &2e,&109,ram%
  6122. &2e,&10f,ram%,oname$,(ncol<63)
  6123. 1,X%,Y%,spm
  6124. DJbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6125. E)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6126. F&pal%=base%+11*4:base%+=base%!(8*4)
  6127.  ncol 
  6128. IR!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
  6129.  Z%=0
  6130. 255:B%=Z%
  6131. Z%<<8
  6132. Z%<<16:B%=B%<<8
  6133. K%pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
  6134. MR!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
  6135.  Z%=0
  6136. 255:B%=palette%!(Z%<<2)<<8
  6137. O%pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
  6138.  Z%=0
  6139. col(Z%,palette%!(Z%<<2)
  6140. &F0F0F0):
  6141.  Z%=0
  6142. 7:A%=0:
  6143. 1 A%+=&F0
  6144. 2 A%+=&F000
  6145. 4 A%+=&F00000
  6146. col(Z%,A%):
  6147.  Z%=0
  6148. 15:A%=Z%<<4:
  6149. col(Z%,A%
  6150. A%<<8
  6151. A%<<16):
  6152.  Z%=0
  6153. 15:A%=(Z%
  6154. 7)/7*15+.2<<4:
  6155. col(Z%,A%
  6156. A%<<8
  6157. A%<<16):
  6158. col(0,0):
  6159. col(1,&F0F000):
  6160. col(2,&F000F0):
  6161. col(3,&F0F0)
  6162.  Z%=0
  6163. col(Z%,palette%!(Z%<<2)
  6164. &F0F0F0):
  6165.  Z%=0
  6166. 3:A%=Z%*5<<4:
  6167. col(Z%,A%
  6168. A%<<8
  6169. A%<<16):
  6170. col(0,0):
  6171. col(1,&F0F0F0)
  6172.  flex% 
  6173.  workspace%<0 
  6174. m/P%=
  6175. :[OPT 0:STR r13,P%+16:MOVS Pc,r14:]:
  6176. +32*1024+
  6177.  base%*size%>2^32 
  6178.  42,"base%*size% product too large"
  6179. Save:
  6180. $+" internal ("+
  6181.  SYS"Hourglass_LEDs",3
  6182. v$ysamp%=1:nl%()=0:step%=4*(col+1)
  6183. wIaddr%=base%<<sizeshft%:rowstep%=xwords%*size%:colstep%=1:dist%=xsp%-1
  6184.  m=-3
  6185. m=-6 dist%=dist%*2
  6186.  m=-4
  6187. m=-10
  6188. m=-12 dist%=dist%*3
  6189.  m=-8 dist%=dist%*4
  6190.  rotate% 
  6191. |6odist%=dist%:
  6192.  colstep%,rowstep%:
  6193.  hflip%,vflip%
  6194.  rotate%=1 
  6195. ~Gaddr%+=(ysp%-1)*colstep%:colstep%=-colstep%:dist%=(ysp%-1)*colstep%
  6196. ;addr%+=dist%:rowstep%=-rowstep%:dist%=(ysp%-1)*colstep%
  6197.  m=-3
  6198. m=-6 colstep%=colstep%/2:rowstep%=rowstep%*2
  6199.  m=-4
  6200. m=-10
  6201. m=-12 colstep%=colstep%/3:rowstep%=rowstep%*3
  6202.  m=-8 colstep%=colstep%/4:rowstep%=rowstep%*4
  6203.  hflip% 
  6204. 0addr%+=dist%:dist%=-dist%:colstep%=-colstep%
  6205.  vflip% 
  6206.  rotate% 
  6207. ,addr%+=odist%*rotate%:rowstep%=-rowstep%
  6208. /addr%+=(ysp%-1)*rowstep%:rowstep%=-rowstep%
  6209. Soutlim%=((base%+xwords%*Y%)<<sizeshft%)-1:oddcolstep%=-colstep%:oddstep%=-step%
  6210.  order% 
  6211. adjustpalette(1/ydiv%/xdiv%,0)
  6212.  m=-9
  6213. m=-10 
  6214.  "OS_SWINumberFromString",,"CompressJPEG_WriteLine" 
  6215.  sy%=y% 
  6216.  sx%=x% 
  6217.  range%=
  6218.  sharpen%=
  6219.  equal%=
  6220.  dither% 
  6221.  yr%=0 
  6222.  y%-1:
  6223.  hour%,yr%*100
  6224. (r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%
  6225.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6226. GA%=addr%+dist%:
  6227.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6228.  wl%,jpegtag%,addr%
  6229. KI%=step%:
  6230.  yr%=0
  6231. y%-1:
  6232.  hour%,yr%*100
  6233.  addr%>outlim% 
  6234. flushoutput
  6235. (r$+"(cl%())"):B%=x%:
  6236.  fs%,colstep%,cl%(1,0),I%,addr%,I%,B%
  6237.  wl%,jpegtag%,addr%
  6238.  equal% 
  6239. rewind:Havg%=
  6240. (vals%())/256/(col+1):
  6241.  new%(256,col)
  6242.  B%=0
  6243. col:R%=0:Hint%=0:
  6244.  Z%=0
  6245. 256:L%=R%:Hint%+=vals%(Z%,B%)
  6246.  Hint%>Havg%:Hint%-=Havg%:R%+=1:
  6247. new%(Z%,B%)=(L%+R%)/2*F/256
  6248.  sharpen% 
  6249.  order% 
  6250. ;yread%=sy%-1:W%=
  6251. (r$+"(rm1%())"):
  6252.  equal% 
  6253. fit2(rm1%())
  6254.  B%=0
  6255. col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
  6256. =yread%=y%-1:
  6257. scaledpixelrow(rm1%()):
  6258.  equal% 
  6259. fit(rm1%())
  6260.  B%=0
  6261. col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
  6262. rm2%()=rm1%()
  6263.  order% 
  6264.  yr%=0 
  6265.  y%-1
  6266.  hour%,yr%*100
  6267.  addr%>outlim% 
  6268. flushoutput
  6269.  sy%=y% 
  6270. sharppixelrow(cl%())
  6271. ;ysamp%-=1:
  6272.  ysamp%=0 
  6273. sharppixelrow(xl%()):ysamp%=ymul%
  6274.  ydiv%=1 
  6275. cl%()=xl%()
  6276.  ysamp%>=ydiv% 
  6277. #ysamp%-=ydiv%:cl%()=xl%()*ydiv%
  6278. /cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6279.  ysamp%=0 
  6280. sharppixelrow(xl%()):ysamp%=ymul%
  6281.  ysamp%>Y% 
  6282. 6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
  6283. >Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
  6284.  Y%=0
  6285. ysamp%+=1
  6286. 2cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
  6287.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6288.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6289.  wl%,jpegtag%,addr%
  6290.  yr%=0 
  6291.  y%-1
  6292.  hour%,yr%*100
  6293.  addr%>outlim% 
  6294. flushoutput
  6295.  sharpen% 
  6296.  yread% yread%-=1:
  6297. scaledpixelrow(rm%()):
  6298.  equal% 
  6299. fit(rm%())
  6300.  B%=0
  6301. col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
  6302.  sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
  6303.  rm2%(),rm1%():rm1%()=rm%()
  6304. scaledpixelrow(cl%()):
  6305.  equal% 
  6306. fit(cl%())
  6307. 2cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
  6308.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6309.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6310.  wl%,jpegtag%,addr%
  6311. "CompressJPEG_Finish",jpegtag% 
  6312.  jpegsize%
  6313.  sy%=y% 
  6314.  sx%=x% 
  6315.  range%=
  6316.  sharpen%=
  6317.  equal%=
  6318.  dither% 
  6319.  yr%=0 
  6320.  y%-1:
  6321.  hour%,yr%*100
  6322.  addr%>outlim% 
  6323. flushoutput
  6324. (r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6325.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6326. BA%+=dist%:
  6327.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6328. KI%=step%:
  6329.  yr%=0
  6330. y%-1:
  6331.  hour%,yr%*100
  6332.  addr%>outlim% 
  6333. flushoutput
  6334. (r$+"(cl%())"):B%=x%:A%=addr%:addr%+=rowstep%:
  6335.  fs%,colstep%,cl%(1,0),I%,A%,I%,B%
  6336.  equal% 
  6337. rewind:Havg%=
  6338. (vals%())/256/(col+1):
  6339.  new%(256,col)
  6340.  B%=0
  6341. col:R%=0:Hint%=0:
  6342.  Z%=0
  6343. 256:L%=R%:Hint%+=vals%(Z%,B%)
  6344.  Hint%>Havg%:Hint%-=Havg%:R%+=1:
  6345. new%(Z%,B%)=(L%+R%)/2*F/256
  6346.  sharpen% 
  6347.  order% 
  6348.     ;yread%=sy%-1:W%=
  6349. (r$+"(rm1%())"):
  6350.  equal% 
  6351. fit2(rm1%())
  6352.  B%=0
  6353. col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
  6354. =yread%=y%-1:
  6355. scaledpixelrow(rm1%()):
  6356.  equal% 
  6357. fit(rm1%())
  6358.  B%=0
  6359. col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
  6360. rm2%()=rm1%()
  6361.  order% 
  6362.  yr%=0 
  6363.  y%-1
  6364.  hour%,yr%*100
  6365.  addr%>outlim% 
  6366. flushoutput
  6367.  sy%=y% 
  6368. sharppixelrow(cl%())
  6369. ;ysamp%-=1:
  6370.  ysamp%=0 
  6371. sharppixelrow(xl%()):ysamp%=ymul%
  6372.  ydiv%=1 
  6373. cl%()=xl%()
  6374.  ysamp%>=ydiv% 
  6375. #ysamp%-=ydiv%:cl%()=xl%()*ydiv%
  6376. /cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6377.  ysamp%=0 
  6378. sharppixelrow(xl%()):ysamp%=ymul%
  6379.  ysamp%>Y% 
  6380. "6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
  6381. $>Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
  6382.  Y%=0
  6383. ysamp%+=1
  6384. +<cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6385.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6386. /BA%+=dist%:
  6387.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6388.  yr%=0 
  6389.  y%-1
  6390.  hour%,yr%*100
  6391.  addr%>outlim% 
  6392. flushoutput
  6393.  sharpen% 
  6394.  yread% yread%-=1:
  6395. scaledpixelrow(rm%()):
  6396.  equal% 
  6397. fit(rm%())
  6398.  B%=0
  6399. col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
  6400.  sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
  6401.  rm2%(),rm1%():rm1%()=rm%()
  6402. scaledpixelrow(cl%()):
  6403.  equal% 
  6404. fit(cl%())
  6405. =<cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6406.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6407. ABA%+=dist%:
  6408.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6409.  m=-11
  6410. m=-12 
  6411.  "OS_SWINumberFromString",,"CompressJPEG_WriteLine" 
  6412.  m=-11 
  6413. IN!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
  6414. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
  6415. 7)*9+20000 
  6416.  jpegtag%
  6417. LN!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
  6418. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
  6419. 15)*30+20000 
  6420.  jpegtag%
  6421. addr%=ram%+20000
  6422.  yr%=0
  6423. ysp%-1
  6424.  hour%,yr%*100
  6425.  ysp%:
  6426.  wl%,jpegtag%,addr%:addr%+=xwords%
  6427. "CompressJPEG_Finish",jpegtag% 
  6428.  jpegsize%
  6429. cputime%=
  6430. -cputime%
  6431. srchdevlist
  6432. [OPT Z
  6433. [%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  6434. \>MOV R0,R4,LSR #(bits-k%):CMP R0,#1<<k%:MOVCS R0,#(1<<k%)-1
  6435. ]%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  6436. ^RMOV R3,R5,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
  6437. R R0,R0,R3,LSL #k%
  6438. _%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  6439. `TMOV R3,R6,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
  6440. R R0,R0,R3,LSL #k%*2
  6441. STMFD SP !,{R8,R9,R10,R11}
  6442. LDR r3,ictloc
  6443. LDR r2,[r3,r0,LSL #2]
  6444. MOV r14,r2,lsr #24
  6445. CMP r14,#4
  6446. ADDCC r2,r3,r0,lsl #2
  6447. BICCS r2,r2,#&ff000000
  6448. LDRB r0,[r2],#1
  6449. SUBS r14,r14,#1
  6450. BEQ gotit
  6451. ADD r3,r0,r0,lsl #1
  6452. ADD r3,r7,r3,lsl #2
  6453. LDMIA r3,{r8,r9,r10}
  6454. SUBS r8,r8,r4
  6455. RSBMI r8,r8,#0
  6456. MOV r8,r8,lsr #bits/2
  6457. SUBS r9,r9,r5
  6458. RSBMI r9,r9,#0
  6459. MOV r9,r9,lsr #bits/2
  6460. SUBS r10,r10,r6
  6461. RSBMI r10,r10,#0
  6462. MOV r10,r10,lsr #bits/2
  6463. MUL r3,r8,r8
  6464. MUL r11,r9,r9
  6465. ADD r11,r11,r11,LSL #2
  6466. ADD r3,r3,r3,LSL #1
  6467. ADD r3,r3,r11,LSL #1
  6468. MLA r11,r10,r10,r3
  6469. .srchlist
  6470. LDRB r3,[r2],#1
  6471. ADD R8,R3,R3,LSL #1
  6472. ADD R8,R7,R8,LSL #2
  6473. LDMIA R8,{R8,R9,R10}
  6474. SUBS R9,R5,R9
  6475. RSBMI R9,R9,#0
  6476. MOV R3,R9,LSR #bits/2
  6477. MUL R9,R3,R3
  6478. ADD r9,r9,r9,LSL #2
  6479. CMP R11,R9,LSL #1
  6480. BCC srchquick
  6481. SUBS R8,R4,R8
  6482. RSBMI R8,R8,#0
  6483. MOV R3,R8,LSR #bits/2
  6484. MUL R8,r3,r3
  6485. ADD r8,r8,r8,LSL #1
  6486. ADD r8,r8,r9,LSL #1
  6487. SUBS R10,R6,R10
  6488. RSBMI R10,R10,#0
  6489. MOV R3,R10,LSR #bits/2
  6490. MLA R10,R3,R3,R8
  6491. CMP R10,R11
  6492. MOVCC R11,R10
  6493. LDRCCB R0,[r2,#-1]
  6494. .srchquick
  6495. SUBS R14,R14,#1
  6496. BNE srchlist
  6497. .gotit
  6498. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  6499. LDMIA R3,{R8,R9,R10}
  6500. +SUB R4,R4,R8:SUB R5,R5,R9:SUB R6,R6,R10
  6501. LDMFD r13!,{R8,R9,R10,R11}
  6502. getoutput(A%,E%,B%,
  6503.  A%>max% 
  6504.  rotate%=
  6505.  vflip%=
  6506. 3C%=max%
  6507.  B%+1:A%=xwords%*C%+E%:first%=
  6508. A%+=E%
  6509.  spritearea%<0 
  6510. 0ram%=
  6511. createarea(A%):
  6512.  ram%=-1 ram%=
  6513. dim(A%)
  6514. ram%=spritearea%
  6515. !ram%=A%
  6516. getoutputjp(
  6517.  spritearea%<0 
  6518. 4ram%=
  6519. createareajp(A%):
  6520.  ram%=-1 ram%=
  6521. dimjp(A%)
  6522. ram%=spritearea%
  6523. !ram%=A%
  6524. createarea(size%)
  6525. areanumber%=0
  6526.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI sprite" 
  6527.  ,areanumber%,,areabase%;V%
  6528.  areanumber%=0:=-1
  6529.  "OS_ReadDynamicArea",areanumber% 
  6530.  ,areasize%
  6531.  areasize%<size% 
  6532. removearea:
  6533.  42,"Couldn't create area"
  6534. =areabase%
  6535. createareajp(
  6536.  size%)
  6537. areanumber%=0
  6538.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI JPEG" 
  6539.  ,areanumber%,,areabase%;V%
  6540.  areanumber%=0:=-1
  6541.  "OS_ReadDynamicArea",areanumber% 
  6542.  ,areasize%:size%=areasize%
  6543. =areabase%
  6544. removearea
  6545.  areanumber% 
  6546.  "OS_DynamicArea",1,areanumber%:areanumber%=0
  6547. cachedim(size%)
  6548. cacheareanumber%=0
  6549.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI cache" 
  6550.  ,cacheareanumber%,,cacheareabase%;V%
  6551.  cacheareanumber%=0:=-1
  6552.  "OS_ReadDynamicArea",cacheareanumber% 
  6553.  ,cacheareasize%
  6554.  cacheareasize%<size% 
  6555. removecachearea:
  6556.  42,"Couldn't create area"
  6557. =cacheareabase%
  6558. removecachearea
  6559.  cacheareanumber% 
  6560.  "OS_DynamicArea",1,cacheareanumber%:cacheareanumber%=0
  6561. flushoutput
  6562.  spritearea%<0 
  6563. oksave% 
  6564. (A%=base%:
  6565.  first% A%=ram%+4:first%=
  6566. 12,2,o%,A%,addr%
  6567.  size%-A%
  6568. addr%=base%*size%
  6569. close
  6570.  flag=3600 
  6571. "PhotoCD_Close",pcdh%,1
  6572. #c%:c%=0:
  6573.  scrapf% scrapf%=
  6574. "Remove <wimp$scrap2>"
  6575.  cc% 
  6576. #cc%:cc%=0
  6577.  ccc% 
  6578. #ccc%:ccc%=0
  6579. removecachearea
  6580. close
  6581.  spritearea%<0 
  6582. oksave% 
  6583. flushoutput 
  6584. "OS_File",10,f$,&004,,ram%,ram%+sz%
  6585.  -2:o%=
  6586. #o%,pnm$
  6587.  pnm$ 
  6588.  "P1"
  6589. #o%,"# "+f$+".pbm (options "+oname$+")"
  6590.  xsp%+" "+
  6591.  ysp%
  6592.  Y%=0
  6593. ysp%-1:B%=base%+Y%*xwords%
  6594.  X%=0
  6595. xsp%-1:
  6596.  B%?(X%>>3)
  6597. (1<<(X%
  6598. #o%,"1"; 
  6599. #o%,"0";
  6600. #o%,""
  6601.  "P4"
  6602. #o%,"# "+f$+".pbm (options "+oname$+") binary encoded"
  6603.  xsp%+" "+
  6604.  ysp%
  6605.  X%=0
  6606. 255:code%?X%=X%<<7 
  6607.  X%<<5
  6608.  X%<<3
  6609.  X%<<1
  6610.  X%>>1
  6611.  X%>>3
  6612. X%>>5
  6613. X%>>7:
  6614.  Y%=0
  6615. ysp%-1:B%=base%+Y%*xwords%
  6616.  X%=0
  6617. xsp%-1
  6618. #o%,code%?(B%?(X%>>3)):
  6619.  "P2"
  6620. #o%,"# "+f$+".pgm (options "+oname$+")"
  6621.  xsp%+" "+
  6622.  ysp%
  6623. #o%,"15"
  6624.  Y%=0
  6625. ysp%-1:B%=base%+Y%*xwords%
  6626.  X%=0
  6627. xsp%-1:C%=B%?(X%>>1):
  6628. 1 C%=C%>>4 
  6629.  C%=C%
  6630. #o%," "+
  6631. #o%,""
  6632.  "P5"
  6633. #o%,"# "+f$+".pgm (options "+oname$+") binary encoded"
  6634.  xsp%+" "+
  6635.  ysp%
  6636. #o%,"15"
  6637.  Y%=0
  6638. ysp%-1:B%=base%+Y%*xwords%
  6639.  X%=0
  6640. xsp%-1:C%=B%?(X%>>1):
  6641. 1 C%=C%>>4 
  6642.  C%=C%
  6643. #o%,C%
  6644. #o%:o%=0
  6645.  pnm$="P2"
  6646. pnm$="P1" 
  6647. "Settype "+f$+" &FFF"
  6648.  -3:o%=
  6649. #o%,pnm$
  6650. #o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits r,g,b)"
  6651.  xsp%+" "+
  6652.  ysp%
  6653. #o%,"31"
  6654. 12,2,o%,ram%,xsp%*ysp%*2
  6655. #o%:o%=0
  6656.  -4:o%=
  6657.  pnm$="IRLAM"
  6658. #o%,"Irlam 24: "+
  6659.  xsp%+" "+
  6660.  ysp%
  6661.  Y%=0
  6662. ysp%-1:B%=ram%+Y%*xwords%
  6663.  X%=0
  6664. xsp%*3-1
  6665. #o%,B%?X%:
  6666. (B%+=1:
  6667.  X%=0
  6668. xsp%*3-1
  6669. #o%,B%?X%:
  6670. (B%+=1:
  6671.  X%=0
  6672. xsp%*3-1
  6673. #o%,B%?X%:
  6674. #o%,pnm$
  6675.  pnm$="P6" 
  6676. #o%,"# "+f$+".ppm (options "+oname$+") binary encoded 24bpp r,g,b"
  6677. #o%,"# "+f$+".ppm (options "+oname$+") "+
  6678. (p6bits*3)+"bpp r,g,b"
  6679.  xsp%+" "+
  6680.  ysp%
  6681. (2^p6bits-1)
  6682.  pnm$="P6" 
  6683. 12,2,o%,ram%,xsp%*ysp%*3
  6684.  Y%=0
  6685. ysp%-1:B%=ram%+Y%*xwords%
  6686.  X%=0
  6687. xsp%-1:C%=B%!(X%*3):
  6688. #o%," "+
  6689. 255)+" "+
  6690. ((C%>>8)
  6691. &FF)+" "+
  6692. ((C%>>16)
  6693. 255);
  6694. #o%,""
  6695. #o%:o%=0
  6696.  pnm$="P3" 
  6697. "Settype "+f$+" &FFF"
  6698.  -5:o%=
  6699. #o%,pnm$
  6700. #o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits y,u,v)"
  6701.  xsp%+" "+
  6702.  ysp%
  6703. #o%,"31 27 21"
  6704. 12,2,o%,ram%,xsp%*ysp%*2
  6705. #o%:o%=0
  6706.  -9,-10,-11,-12
  6707.  spritearea%<0 
  6708. oksave% 
  6709. 8,10,f$,&c85,,ram%,ram%+jpegsize%
  6710.  ncol=1
  6711. m$="T" 
  6712.  X%=(xsp%*4-1)
  6713. 8*8+6
  6714. &2e,&12e,ram%,oname$,X%
  6715. &2e,&12e,ram%,oname$,X%
  6716.  spritearea%<0 
  6717. oksave% 
  6718. flushoutput 
  6719. &2e,&10c,ram%,f$
  6720. #o%:o%=0:
  6721. "settype "+f$+" &ff9":
  6722. removearea
  6723. "Hourglass_Off"
  6724. defpal
  6725.  C%=0
  6726. J#r%(C%)=(C%
  6727. 16)>>1)/15*F
  6728. K$g%(C%)=(C%
  6729. &60)>>3)/15*F
  6730. L0b%(C%)=(C%
  6731. 8)>>1 
  6732. 128)>>4)/15*F
  6733. defpal2
  6734. r%(0)=F:g%(0)=F:b%(0)=F
  6735. defpal4
  6736. S0r%()=15,10,5,0:
  6737.  C%=0
  6738. 3:r%(C%)=r%(C%)/15*F:
  6739. g%()=r%():b%()=r%()
  6740. defpal16
  6741. W1r%()=15,13,11,9,7,5,3,0,0,14, 0,13,14,5,15, 0
  6742. X1g%()=15,13,11,9,7,5,3,0,4,14,12, 0,14,8,11,10
  6743. Y1b%()=15,13,11,9,7,5,3,0,9, 0, 0, 0,11,0, 0,15
  6744.  C%=0
  6745. 15:r%(C%)=r%(C%)/15*F:g%(C%)=g%(C%)/15*F:b%(C%)=b%(C%)/15*F:
  6746. ipal63
  6747. #c%=&38:
  6748.  rpal%(15),gpal%(15),bpal%(15)
  6749.  C%=0
  6750. 15:D%=
  6751. rpal%(C%)=
  6752. #c%>>4 
  6753. gpal%(C%)=
  6754. #c%>>4 
  6755. bpal%(C%)=
  6756. #c%>>4 
  6757.  C%=0
  6758. d)r%(C%)=(rpal%(C%
  6759. 16)>>1)/15*F
  6760. e*g%(C%)=(gpal%(C%
  6761. &60)>>3)/15*F
  6762. f*b%(C%)=(bpal%(C%
  6763. 128)>>4)/15*F
  6764. ipal(D%)
  6765. #c%=&38
  6766.  C%=0
  6767. D%-1:D%=
  6768. r%(C%)=(
  6769. #c%>>4)/15*F
  6770. g%(C%)=(
  6771. #c%>>4)/15*F
  6772. b%(C%)=(
  6773. #c%>>4)/15*F
  6774. newropal(D%)
  6775. #c%=&38
  6776.  C%=0
  6777. D%-1:D%=
  6778. r%(C%)=(D%
  6779. 255)/255*F
  6780. g%(C%)=(D%>>8
  6781. 255)/255*F
  6782. b%(C%)=(D%>>16
  6783. 255)/255*F
  6784. nopal
  6785.  C%=0
  6786. 255:r%(C%)=C%/255*F:
  6787. :g%()=r%():b%()=r%()
  6788. col(A%,B%)
  6789. }6B%=B%<<8
  6790. B%<<4
  6791. &10:pal%!(A%*8)=B%:pal%!(A%*8+4)=B%
  6792. bits(A%)
  6793.  A%=1 
  6794. ="1 bit per pixel" 
  6795.  A%+" bits per pixel"
  6796.  Z%,s$
  6797.  Z%=1
  6798. 80:s$+=
  6799. uc(a$)
  6800.  Z%,z$,b$
  6801.  Z%=1
  6802. a$,Z%,1)
  6803.  z$>="a"
  6804.  z$<="z" z$=
  6805.  z$-32)
  6806. b$+=z$:
  6807. dim(A%)
  6808.  flex% 
  6809. 1B%=nextlocation%:A%=A%+3
  6810. 3:nextlocation%+=A%
  6811. "Wimp_SlotSize",-1,-1 
  6812.  currentslot%
  6813.  currentslot%+&8000<nextlocation% 
  6814.  "Wimp_SlotSize",nextlocation%-&8000,-1 
  6815.  currentslot%
  6816.  currentslot%+&8000<nextlocation% 
  6817.  42,"Can't get enough memory to process image"
  6818.  workspace%<0 
  6819.  B% A%
  6820. XB%=workspace%:workspace%+=A%+3
  6821.  workspace%>worklimit% 
  6822. 42,"Not enough workspace"
  6823. dimjp(
  6824.  flex% 
  6825. 1B%=nextlocation%:A%=A%+3
  6826. 3:nextlocation%+=A%
  6827. "Wimp_SlotSize",-1,-1 
  6828.  currentslot%
  6829.  currentslot%+&8000<nextlocation% 
  6830.  "Wimp_SlotSize",nextlocation%-&8000,-1 
  6831.  currentslot%
  6832.  currentslot%+&8000<nextlocation% A%=currentslot%+&8000-B%
  6833.  workspace%<0 
  6834.  B% A%
  6835. XB%=workspace%:workspace%+=A%+3
  6836.  workspace%>worklimit% 
  6837. 42,"Not enough workspace"
  6838. W1(c%)
  6839. W1(c%)=
  6840. #c%<<8 
  6841. #c%<<16 
  6842. #c%<<24
  6843. #c%<<8
  6844. beHW=
  6845. #c%<<8 
  6846. #c%<<24 
  6847. #c%<<16 
  6848. #c%<<8 
  6849. tiff(T%)
  6850.  1,7:=
  6851.  s$,t$:
  6852.  s$+=t$:t$=
  6853. 0:=s$
  6854.  bigendian 
  6855. #c%<<8 
  6856. #c%<<8
  6857.  4,9:
  6858.  bigendian 
  6859. W1(c%)
  6860.  6:=(
  6861. #c%<<24)>>24
  6862.  8:=(
  6863. tiff(3)<<16)>>16
  6864.  42,"Silly TIFF tag:"+
  6865. nextstrip
  6866. rowstogo%=striprows%
  6867. "stripptr+=1:
  6868. #c%=st%(stripptr)
  6869.  compression=5 
  6870. F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  6871. H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  6872.  compression=5 
  6873.  compression=32773 
  6874. .!incacheptr=datacache%:!numlefttogo=cache%
  6875. 12,4,c%,datacache%,cache%
  6876. watford(wtsx%,
  6877.  rep%,
  6878.  wt%,X%,c%)
  6879.  rlexpand%,wtsx%,rep%,wt%,X%
  6880.  C%>>6 
  6881.  0:?X%=C%:X%+=1:wt%=C%
  6882.  1:wt%-=1:rep%=C%
  6883.  rlexpand%,wtsx%,rep%,wt%,X%
  6884.  2:rep%=C%
  6885.  rlexpand%,wtsx%,rep%,wt%,X%
  6886.  3:wt%+=1:rep%=C%
  6887.  rlexpand%,wtsx%,rep%,wt%,X%
  6888.  X%=wtsx%
  6889. watfordcache(wtsx%,
  6890.  rep%,
  6891.  wt%,X%)
  6892.  rlexpand%,wtsx%,rep%,wt%,X%
  6893.  bytefromcache%:
  6894.  C%>>6 
  6895.  0:?X%=C%:X%+=1:wt%=C%
  6896.  1:wt%-=1:rep%=C%
  6897.  rlexpand%,wtsx%,rep%,wt%,X%
  6898.  2:rep%=C%
  6899.  rlexpand%,wtsx%,rep%,wt%,X%
  6900.  3:wt%+=1:rep%=C%
  6901.  rlexpand%,wtsx%,rep%,wt%,X%
  6902.  X%=wtsx%
  6903. reduce(
  6904.  C%,D%:C%=A%:D%=B%
  6905.  C%<D% 
  6906.  C%,D%
  6907. C%=C%
  6908.  C%=0
  6909. A%=A%
  6910.  D%:B%=B%
  6911. readpixelrow(z%())
  6912.  rows% 
  6913. rows%-=1:
  6914.  sx%=x% 
  6915. (r$+"(z%())")
  6916. (r$+"(xp%())"):
  6917.  xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
  6918. z%()=0
  6919. sharppixelrow(z%())
  6920.  rows% 
  6921. rows%-=1:
  6922.  sx%=x% 
  6923.  sharpen% 
  6924. sharp(z%()) 
  6925. (r$+"(z%())"):
  6926.  equal% 
  6927. fit2(z%())
  6928.  sharpen% 
  6929. sharp(xp%()) 
  6930. (r$+"(xp%())"):
  6931.  equal% 
  6932. fit2(xp%())
  6933.  xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
  6934. z%()=0
  6935. sharp(z%())
  6936. ?yread%-=1:
  6937.  yread% W%=
  6938. (r$+"(rm%())"):
  6939.  equal% 
  6940. fit2(rm%())
  6941.  B%=0
  6942. col:rm%(0,B%)=rm%(1,B%):rm%(sx%+1,B%)=rm%(sx%,B%):
  6943.  sharp%,z%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals2%
  6944.  rm2%(),rm1%():rm1%()=rm%()
  6945. scaledpixelrow(z%())
  6946.  sy%=y% 
  6947. readpixelrow(z%())
  6948. :ysamp%-=1:
  6949.  ysamp%=0 
  6950. readpixelrow(xl%()):ysamp%=ymul%
  6951.  ydiv%=1 
  6952. z%()=xl%()
  6953.  ysamp%>=ydiv% 
  6954. "ysamp%-=ydiv%:z%()=xl%()*ydiv%
  6955.  Y%:z%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6956.  ysamp%=0 
  6957. readpixelrow(xl%()):ysamp%=ymul%
  6958.  ysamp%>Y% 
  6959. 4ysamp%-=Y%:xl2%()=xl%()*Y%:z%()=z%()+xl2%():Y%=0
  6960. <Y%-=ysamp%:xl2%()=xl%()*ysamp%:z%()=z%()+xl2%():ysamp%=0
  6961.  Y%=0
  6962. ysamp%+=1
  6963. fit(z%())
  6964.  histequal%,z%(1,0),new%(0,0),x%
  6965. fit2(z%())
  6966.  histequal%,z%(1,0),new%(0,0),sx%
  6967. adjustpalette(mul,sub)
  6968.  mul=1 
  6969.  sub=0 
  6970.  C%=0
  6971. colourindex
  6972. #Qr%(C%)=(r%(C%)-sub)*mul+1:g%(C%)=(g%(C%)-sub)*mul+1:b%(C%)=(b%(C%)-sub)*mul+1
  6973.  ham 
  6974.  C%=0
  6975. 4:ltable!C%=(ltable!C%-sub)*mul+1:
  6976.  input>400 
  6977.  C%=0
  6978. colourindex
  6979. *Crpal%(C%)=(rpal%(C%)-sub)*mul+1:gpal%(C%)=(gpal%(C%)-sub)*mul+1
  6980. +Ebpal%(C%)=(bpal%(C%)-sub)*mul+1:table%(C%)=(table%(C%)-sub)*mul+1
  6981. cachesize(A%)
  6982. &20023,"ChangeFSI$Cache",A%,-1 
  6983.  Z<>0 
  6984. 35,"ChangeFSI$Cache",A%,20 
  6985. ,,Z:A%?Z=13:cache%=
  6986. $A%,"K")
  6987. $A%,"k") cache%=cache%*1024
  6988. cache%=128*1024
  6989. refill
  6990.  striprows%>0 
  6991. nextstrip
  6992. 12,4,c%,datacache%,cache%:rowstogo%=cacherows%:buff%=datacache%
  6993.  input=24
  6994. input=48 
  6995.  rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  6996. refillpcd
  6997.  pcdblk%!4>=sy% 
  6998.  pcdblk%!12>=sy% pcdblk%!12=sy%
  6999. "PhotoCD_GetBlock",pcdh%,,pcdblk%,datacache%,pcdindex%,,,pcdcache%,pcdcachesize%
  7000. AVrowstogo%=cacherows%:buff%=datacache%:pcdblk%!4+=cacherows%:pcdblk%!12+=cacherows%
  7001. B0rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  7002. 8(z%())
  7003.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%:buff%+=rowbytes%
  7004. F&rowstogo%-=1:
  7005.  rowstogo%=0 
  7006. refill
  7007. 16(z%())
  7008.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
  7009. J7buff%+=rowbytes%:rowstogo%-=1:
  7010.  rowstogo%=0 
  7011. refill
  7012. 24(z%())
  7013.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7014. N0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
  7015. O&rowstogo%-=1:
  7016.  rowstogo%=0 
  7017. refill
  7018. 300(z%())
  7019. 12,4,cc%,pbuff%,sx%:
  7020.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),pbuff%,buff%
  7021. S7buff%+=rowbytes%:rowstogo%-=1:
  7022.  rowstogo%=0 
  7023. refill
  7024. 400(z%())
  7025.  readline%,plbytes%,rep%,pix%,plbuff%
  7026.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7027. 500(z%())
  7028.  LZWdecode%,table%(0),c%,plbuff%,sx%
  7029.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7030. 800(z%())
  7031. watfordcache(wtsx%,rep%,wt%,plbuff%)
  7032.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7033. 801(z%())
  7034. watford(wtsx1%,rep1%,wt1%,buff%,c%)
  7035. watford(wtsx2%,rep2%,wt2%,wtsx1%,cc%)
  7036. watford(wtsx3%,rep3%,wt3%,wtsx2%,ccc%)
  7037.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7038. 901(z%())
  7039. 12,4,c%,rb%,sx%:
  7040. 12,4,cc%,gb%,sx%:
  7041. 12,4,ccc%,bb%,sx%
  7042.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7043. 902(z%())
  7044.  unpack%,buff%:
  7045.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7046. m7buff%+=rowbytes%:rowstogo%-=1:
  7047.  rowstogo%=0 
  7048. refill
  7049. 1000(z%())
  7050. pAX%=buff%:
  7051.  rep%>0 C%=?pa%:
  7052.  rlexpand%,pasx%,rep%,C%,X%:pa%+=1
  7053.  rep2%>0 C%=?pa%:
  7054.  rlexpand%,pasx%,rep2%,C%,X%:pa%+=1
  7055.  C%=0 
  7056. sBrep%=
  7057. #c%:C%=?pa%:
  7058.  rlexpand%,pasx%,rep%,C%,X%:
  7059.  rep%=0 pa%+=1
  7060. uVrep2%=C%
  7061. 15:rep%=C%>>4:
  7062.  rep% C%=?pa%:
  7063.  rlexpand%,pasx%,rep%,C%,X%:
  7064.  rep%=0 pa%+=1
  7065.  X%<pasx% 
  7066.  rep2% C%=?pa%:
  7067.  rlexpand%,pasx%,rep2%,C%,X%:
  7068.  rep2%=0 pa%+=1
  7069.  X%=pasx%
  7070.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7071. 1001(z%())
  7072. |AX%=buff%:
  7073.  rep%>0 C%=?pa%:
  7074.  rlexpand%,pasx%,rep%,C%,X%:pa%+=1
  7075.  rep%=
  7076. #c%:C%=?pa%:
  7077.  rlexpand%,pasx%,rep%,C%,X%:
  7078.  rep%=0 pa%+=1
  7079.  X%=pasx%:
  7080.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7081. 1100(z%())
  7082.  readline%,plbytes%,rep%,pix%,plbuff%
  7083.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7084. 1400(z%())
  7085.  vrep% 
  7086. vrep%-=1
  7087. 9G%=buff%:
  7088.  X%=1
  7089. planes%:G%+=rowbytes%:F%=G%-rowbytes%
  7090.  C%=0 
  7091.  C%=0 
  7092. #c%:vrep%=
  7093. #c%-1
  7094. *D%=F%:
  7095. 12,4,c%,F%,patlen%:F%+=patlen%
  7096.  C%>1 
  7097.  N%=2
  7098.  E%=0
  7099. patlen%-1:F%?E%=D%?E%:
  7100. :F%+=patlen%:
  7101.  C%=128 
  7102. 12,4,c%,F%,C%:F%+=C%
  7103. >?F%=(C%
  7104. &80)<>0:
  7105.  E%=F%+1
  7106. F%+(C%
  7107. &7F):?E%=?F%:
  7108. :F%+=C%
  7109.  F%>=G%:
  7110.  plancnv%,rowbytes%,buff%,pbuff%
  7111.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7112. 1501(z%())
  7113.  readiff%,rowbytes%,plbuff%:rowstogo%-=1:
  7114.  rowstogo%=0 
  7115. nextstrip
  7116.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7117. 1505(z%())
  7118.  LZWdecode%,table%(0),c%,plbuff%,rowbytes%
  7119. )rowstogo%-=1:
  7120.  rowstogo%=0 
  7121. nextstrip
  7122.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7123. 1515(z%())
  7124.  LZWdecode%,table%(0),c%,plbuff%,rowbytes%
  7125. )rowstogo%-=1:
  7126.  rowstogo%=0 
  7127. nextstrip
  7128.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7129. 1600(z%())
  7130.  plancnv%,realrowbytes%,buff%,pbuff%:buff%+=rowbytes%
  7131.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7132. &rowstogo%-=1:
  7133.  rowstogo%=0 
  7134. refill
  7135. 1601(z%())
  7136.  X%=0
  7137. planes%-1:F%=plbuff%+X%*rowbytes%:
  7138.  readiff%,rowbytes%,F%:
  7139.  masking% 
  7140.  readiff%,rowbytes%,pbuff%
  7141.  plancnv%,rowbytes%,plbuff%,pbuff%
  7142.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7143. 1850(z%())
  7144.  readiff%,rowbytes%,plbuff%
  7145.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7146. 1851(z%())
  7147.  readiff%,rowbytes%,plbuff%
  7148.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7149. 1900(z%())
  7150.  readline%,plbytes%,rep%,pix%,plbuff%
  7151.  plancnv%,rowbytes%,plbuff%,pbuff%
  7152.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7153. 2000(z%())
  7154. X%=buff%:
  7155.  C%<128 
  7156.  C%+=1:
  7157. 12,4,c%,X%,C%:X%+=C%
  7158. 1F%=X%:?F%=
  7159.  C%=C%
  7160. -1:?X%=?F%:X%+=1:
  7161.  X%=buff%+rowbytes%
  7162.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7163. 2001(z%())
  7164. X%=buff%:
  7165.  C%<128 
  7166. &C%=(C%+1)*2:
  7167. 12,4,c%,X%,C%:X%+=C%
  7168. 7F%=X%:
  7169. 12,4,c%,X%,2:
  7170.  C%=C%
  7171. -1:!X%=!F%:X%+=2:
  7172.  X%=buff%+rowbytes%
  7173.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
  7174. 2002(z%())
  7175. X%=buff%:
  7176.  C%<128 
  7177. +C%=(C%+1)*step24:
  7178. 12,4,c%,X%,C%:X%+=C%
  7179. AF%=X%:
  7180. 12,4,c%,X%,step24:
  7181.  C%=C%
  7182. -1:!X%=!F%:X%+=step24:
  7183.  X%=buff%+rowbytes%
  7184.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7185. 2250(z%())
  7186.  mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
  7187. 7buff%+=rowbytes%:rowstogo%-=1:
  7188.  rowstogo%=0 
  7189. refill
  7190. 2300(z%())
  7191.  clrfirst% 
  7192.  X%=0
  7193. sx%-1:rb%?X%=?back%:gb%?X%=back%?1:bb%?X%=back%?2:
  7194.  vrep% 
  7195. vrep%-=1
  7196.  vrep%=-1:
  7197.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%:=
  7198. #c%:D%=
  7199. &40 D%=
  7200.  1:E%=
  7201. :vrep%=D%-1:
  7202.  vrep%<0 vrep%=
  7203.  2:ccol%=back%?D%:cbuf%=rb%+sx%*D%:
  7204.  D%=255 cbuf%=alpha%
  7205.  X%=0
  7206. D%-1:cbuf%?X%=ccol%:
  7207. :cbuf%+=D%
  7208. 12,4,c%,cbuf%,D%+1:cbuf%+=D%+1:
  7209.  D%+1
  7210.  6:C%=
  7211.  X%=0
  7212. D%:cbuf%?X%=C%:
  7213. :cbuf%+=D%+1
  7214.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7215. 2401(z%())
  7216.  bm_rle8,rowbytes%,plbuff%
  7217.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7218. 2402(z%())
  7219.  bm_rle4,rowbytes%,plbuff%
  7220.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7221. 3000(z%())
  7222.  mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
  7223. 7buff%+=rowbytes%:rowstogo%-=1:
  7224.  rowstogo%=0 
  7225. refill
  7226. 3500(z%())
  7227. 3600(z%())
  7228.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7229. 0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
  7230. )rowstogo%-=1:
  7231.  rowstogo%=0 
  7232. refillpcd
  7233. 3708(z%())
  7234. 4A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
  7235. (jpeg%+4)
  7236.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%
  7237. 3724(z%())
  7238. HA%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
  7239. (jpeg%+4):gb%=rb%+1:bb%=rb%+2
  7240.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7241. rewind
  7242. rows%=sy%:
  7243.  flag 
  7244. #c%=st%
  7245.  100:
  7246. #c%=4
  7247.  200:
  7248. #c%=st%:rep%=0
  7249.  300:
  7250. #c%=st%:
  7251. #cc%=stcc%
  7252.  400:
  7253. #c%=st%:rep%=0
  7254.  500:
  7255.  I%=0
  7256. clearcode%-1:table%(I%)=I%:
  7257. #c%=st%
  7258. F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  7259. H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  7260.  501:buff%=datacache%
  7261.  600:
  7262. #c%=&380
  7263.  700:
  7264. #c%=st%
  7265.  800:
  7266. #c%=0:rep%=0:wt%=0
  7267.  801:
  7268. #c%=0:
  7269. #cc%=0:
  7270. #ccc%=0:rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
  7271.  900:
  7272. #c%=0
  7273.  901:
  7274. #c%=0:
  7275. #cc%=0:
  7276. #ccc%=0
  7277.  902:
  7278. #c%=st%
  7279.  1000:
  7280. #c%=st%:pa%=ctable%:rep%=0:rep2%=0
  7281.  1100:
  7282. #c%=st%:rep%=0
  7283.  1200:
  7284. #c%=1600
  7285.  1300:
  7286. #c%=0
  7287.  1301:
  7288. #c%=0:
  7289. #cc%=0:
  7290. #ccc%=0
  7291.  1400:
  7292. #c%=st%:vrep%=0
  7293.  1500:
  7294. #c%=st%(0):rowstogo%=striprows%:stripptr=0
  7295.  compression=5 
  7296. +F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  7297. ,H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  7298.  1600:
  7299. #c%=st%
  7300.  1700:
  7301. #c%=16
  7302.  1800,1850:
  7303. #c%=st%
  7304.  1900:
  7305. #c%=128:rep%=-1
  7306.  2000:
  7307. #c%=st%
  7308.  2100:
  7309. #c%=7
  7310.  2200:
  7311. #c%=st%
  7312.  2250:
  7313. #c%=st%
  7314.  2300:
  7315. #c%=st%:vrep%=0
  7316.  2400:
  7317. #c%=st%
  7318.  2500:
  7319. #c%=st%
  7320.  2600:
  7321. #c%=st%
  7322.  2700:
  7323. #c%=st%
  7324.  2800:
  7325. #c%=st%
  7326.  2900:
  7327. #c%=st%
  7328.  3000:
  7329. #c%=0
  7330.  3600:pcdblk%!4=0
  7331.  3700:jpegy%=sy%
  7332.  3900,3905:
  7333. #c%=st%
  7334.  cache% 
  7335.  flag=3600 
  7336. DEpcdblk%!12=cacherows%:
  7337. refillpcd:
  7338.  cache%>=filesize% rowstogo%=-1
  7339.  cache%<filesize% 
  7340. 12,4,c%,datacache%,cache%:rowstogo%=cacherows%
  7341. buff%=datacache%
  7342.  cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
  7343.  input=24
  7344. input=48 
  7345.  rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  7346.  flag=1500 
  7347.  compression=5 rowstogo%=striprows%
  7348. Assemble_Shell
  7349.  I%=0
  7350. P%=code%
  7351. [ OPT I%
  7352. .Shell_Call
  7353. MOV   R9,R0
  7354. TSMOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  7355. SWI   "OS_SetEnv"
  7356. STMFD R13!,{R0-R7, R12}
  7357. W-MOV   R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#0
  7358. SWI   "OS_Control"
  7359. STMFD R13!,{R0-R3}
  7360. Z%MOV   R0,#&10:MOV R1,#0:MOV R2,#0
  7361. [!SWI   "XOS_ChangeEnvironment"
  7362. STMFD R13!,{R1,R2}
  7363. LDR   R3,[R14,#28]
  7364. LDR   R3,[R8,R3]
  7365. STMFD R13!,{R3,R9,R14}
  7366. SUB   R9,R13,#1024
  7367. MOV   R5,R9
  7368. b-ADR   R6,Shell_Job:ADR   R4,Shell_Job_End
  7369. .Shell_Copy
  7370. LDR   R2,[R6],#4
  7371. STR   R2,[R5],#4
  7372. CMP   R6,R4
  7373. BCC   Shell_Copy
  7374. MOV   PC,R9
  7375. .Shell_Job
  7376. LDR   R2,[R3,#-4]!
  7377. STR   R2,[R9,#-4]!
  7378. CMP   R3,#&8000
  7379. BHI   Shell_Job
  7380. STMFD R13!,{R9}
  7381. ADR   R0,Shell_Exit
  7382. pKMOV   R1,R9:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  7383. SWI   "OS_SetEnv"
  7384. ADR   R0,Shell_Error
  7385. ADR   R1,Shell_Buffer
  7386. MOV   R2,#0:MOV R3,#0
  7387. SWI   "OS_Control"
  7388. MOV   R0,#&10
  7389. ADR   R1,Shell_UpCall
  7390. MVN   R2,#0
  7391. y!SWI   "XOS_ChangeEnvironment"
  7392. STR   R13,Shell_Job_End
  7393. LDR   R0,[R13,#4*2]
  7394. ADD   R0,R0,R9
  7395. SUB   R0,R0,#&8000
  7396. SWI   "OS_CLI"
  7397. .Shell_Exit
  7398. MOV   r0, #0
  7399. .Shell_Common
  7400. STR   r0, Shell_ErrorWord
  7401. LDR   R13,Shell_Job_End
  7402. LDMFD R13!,{R8,R9,R10,R14}
  7403. LDMFD R13!,{R1-R2}
  7404. MOV   R0,#&10
  7405.  SWI   "OS_ChangeEnvironment"
  7406. LDMFD R13!,{R0-R3}
  7407. SWI   "OS_Control"
  7408. LDMFD R13!,{R0-R7, R12}
  7409. SWI   "OS_SetEnv"
  7410. MOV   R1,#&8000
  7411. .Shell_Restore
  7412. LDR   R2,[R8],#4
  7413. STR   R2,[R1],#4
  7414. CMP   R1,R9
  7415. BCC   Shell_Restore
  7416. LDR   R0,Shell_ErrorWord
  7417. TEQ   R0,#0
  7418. BICEQS PC,R14,#&10000000
  7419. RNES PC,R14,#&10000000
  7420. .Shell_UpCall
  7421. MOV   PC,R14
  7422. .Shell_Error
  7423. ADR   r0, Shell_Buffer + 4
  7424. B     Shell_Common
  7425. .Shell_Buffer
  7426. EQUD 0
  7427. EQUD &12345678
  7428. EQUS 
  7429. EQUS 
  7430. .Shell_ErrorWord
  7431. EQUD 0
  7432. .Shell_Job_End
  7433. EQUD 0
  7434. A%=Shell_Job_End+4
  7435. subtask(a$)
  7436.  task% 
  7437. "Wimp_StartTask",a$
  7438.  code% 1024
  7439. Assemble_Shell
  7440. $A%=a$:
  7441.  Shell_Call
  7442. snb_next(c%)
  7443. #c%<>255 
  7444. #c%:=&100
  7445.  v%<>255:
  7446. #c%:v%=256
  7447. snb_skip(c%)
  7448.  v%,w%:v%=
  7449. #c%:w%=
  7450. #c%:w%=(w%*256+
  7451. #c%=v%+w%:
  7452. snb_needdjpeg(c%)
  7453.  sz%:
  7454.  Not Acorn code - added. Assumes file is JPEG!
  7455. #c%=2:
  7456. :sz%=
  7457. snb_next(c%):
  7458.  sz%=&C0 
  7459.  sz%>255:=
  7460.  sz%>&C0 
  7461. sz%<&D0 
  7462. sz%<>&C4 
  7463. sz%<>&CC:=
  7464.  M_SOFn
  7465.  sz%>&E0 
  7466.  sz%<&F0:=
  7467.  M_APPn
  7468. snb_skip(c%):
  7469. getstring(ptr%)
  7470.  c%,p$
  7471.     p$=""
  7472.  (?ptr%>31 
  7473.  ?ptr%<256) 
  7474. (p$)<255
  7475.   c%=?ptr%
  7476.   p$+=
  7477.   ptr%+=1
  7478.